diff --git a/docs/public/schema/latest.json b/docs/public/schema/latest.json index a629a1ec..b44c30f8 120000 --- a/docs/public/schema/latest.json +++ b/docs/public/schema/latest.json @@ -1 +1 @@ -v0.12.1.json \ No newline at end of file +v0.12.2.json \ No newline at end of file diff --git a/docs/public/schema/v0.12.2.json b/docs/public/schema/v0.12.2.json new file mode 100644 index 00000000..5e6aa1ff --- /dev/null +++ b/docs/public/schema/v0.12.2.json @@ -0,0 +1,200149 @@ +{ + "$ref": "#/definitions/Spec", + "$schema": "http://json-schema.org/draft-07/schema#", + "definitions": { + "AggregateExpression": { + "additionalProperties": false, + "description": "A custom SQL aggregate expression.", + "properties": { + "agg": { + "description": "A SQL expression string to calculate an aggregate value. Embedded Param references, such as `SUM($param + 1)`, are supported. For expressions without aggregate functions, use *sql* instead.", + "type": "string" + }, + "label": { + "description": "A label for this expression, for example to label a plot axis.", + "type": "string" + } + }, + "required": [ + "agg" + ], + "type": "object" + }, + "AggregateTransform": { + "anyOf": [ + { + "$ref": "#/definitions/Argmax" + }, + { + "$ref": "#/definitions/Argmin" + }, + { + "$ref": "#/definitions/Avg" + }, + { + "$ref": "#/definitions/Count" + }, + { + "$ref": "#/definitions/Max" + }, + { + "$ref": "#/definitions/Min" + }, + { + "$ref": "#/definitions/First" + }, + { + "$ref": "#/definitions/Last" + }, + { + "$ref": "#/definitions/Median" + }, + { + "$ref": "#/definitions/Mode" + }, + { + "$ref": "#/definitions/Product" + }, + { + "$ref": "#/definitions/Quantile" + }, + { + "$ref": "#/definitions/Stddev" + }, + { + "$ref": "#/definitions/StddevPop" + }, + { + "$ref": "#/definitions/Sum" + }, + { + "$ref": "#/definitions/Variance" + }, + { + "$ref": "#/definitions/VarPop" + } + ], + "description": "An aggregate transform that combines multiple values." + }, + "Area": { + "additionalProperties": false, + "description": "The area mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "area", + "description": "An area mark. The area mark is rarely used directly; it is only needed when the baseline and topline have neither *x* nor *y* values in common. Use areaY for a horizontal orientation where the baseline and topline share *x* values, or areaX for a vertical orientation where the baseline and topline share *y* values.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, representing the area’s baseline, typically bound to the *x* scale. For areaX, setting this option disables the implicit stackX transform." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often right) horizontal position channel, representing the area’s topline, typically bound to the *x* scale; if not specified, **x1** is used. For areaX, setting this option disables the implicit stackX transform." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, representing the area’s baseline, typically bound to the *y* scale. For areaY, setting this option disables the implicit stackY transform." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often top) vertical position channel, representing the area’s topline, typically bound to the *y* scale; if not specified, **y1** is used. For areaY, setting this option disables the implicit stackY transform." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "AreaX": { + "additionalProperties": false, + "description": "The areaX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "areaX", + "description": "A vertically-oriented area mark, where the baseline and topline share\n**y** values, as in a time-series area chart where time goes up↑.\n\nIf neither **x1** nor **x2** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero.\n\nIf an **interval** is specified, **y** values are binned accordingly, allowing zeroes for empty bins instead of interpolating across gaps. This is recommended to “regularize” sampled data; for example, if your data represents timestamped observations and you expect one observation per day, use *day* as the **interval**.\n\nVariable aesthetic channels are supported: if the **fill** is defined as a channel, the area will be broken into contiguous overlapping sections when the fill color changes; the fill color will apply to the interval spanning the current data point and the following data point. This behavior also applies to the **fillOpacity**, **stroke**, **strokeOpacity**,\n**strokeWidth**, **opacity**, **href**, **title**, and **ariaLabel** channels. When any of these channels are used, setting an explicit **z** channel (possibly to null) is strongly recommended.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position (or length) channel, typically bound to the *x* scale.\n\nIf neither **x1** nor **x2** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, representing the area’s baseline, typically bound to the *x* scale. For areaX, setting this option disables the implicit stackX transform." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often right) horizontal position channel, representing the area’s topline, typically bound to the *x* scale; if not specified, **x1** is used. For areaX, setting this option disables the implicit stackX transform." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "AreaY": { + "additionalProperties": false, + "description": "The areaY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "areaY", + "description": "A horizontally-oriented area mark, where the baseline and topline share\n**x** values, as in a time-series area chart where time goes right→.\n\nIf neither **y1** nor **y2** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero.\n\nIf an **interval** is specified, **x** values are binned accordingly, allowing zeroes for empty bins instead of interpolating across gaps. This is recommended to “regularize” sampled data; for example, if your data represents timestamped observations and you expect one observation per day, use *day* as the **interval**.\n\nVariable aesthetic channels are supported: if the **fill** is defined as a channel, the area will be broken into contiguous overlapping sections when the fill color changes; the fill color will apply to the interval spanning the current data point and the following data point. This behavior also applies to the **fillOpacity**, **stroke**, **strokeOpacity**,\n**strokeWidth**, **opacity**, **href**, **title**, and **ariaLabel** channels. When any of these channels are used, setting an explicit **z** channel (possibly to null) is strongly recommended.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position (or length) channel, typically bound to the *y* scale.\n\nIf neither **y1** nor **y2** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, representing the area’s baseline, typically bound to the *y* scale. For areaY, setting this option disables the implicit stackY transform." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often top) vertical position channel, representing the area’s topline, typically bound to the *y* scale; if not specified, **y1** is used. For areaY, setting this option disables the implicit stackY transform." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Argmax": { + "additionalProperties": false, + "properties": { + "argmax": { + "description": "Find a value of the first column that maximizes the second column.", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "argmax" + ], + "type": "object" + }, + "Argmin": { + "additionalProperties": false, + "properties": { + "argmin": { + "description": "Find a value of the first column that minimizes the second column.", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "argmin" + ], + "type": "object" + }, + "Arrow": { + "additionalProperties": false, + "description": "The arrow mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The angle, a constant in degrees, between the straight line intersecting the arrow’s two control points and the outgoing tangent direction of the arrow from the start point. The angle must be within ±90°; a positive angle will produce a clockwise curve, while a negative angle will produce a counterclockwise curve; zero (the default) will produce a straight line. Use true for 22.5°." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "headAngle": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How pointy the arrowhead is, in degrees; a constant typically between 0° and 180°, and defaults to 60°." + }, + "headLength": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the arrowhead relative to the **strokeWidth**; a constant. Assuming the default of stroke width 1.5px, this is the length of the arrowhead’s side in pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for **insetStart** and **insetEnd**." + }, + "insetEnd": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The ending inset, a constant in pixels; defaults to 0. A positive inset shortens the arrow by moving the ending point towards the starting point, while a negative inset extends it by moving the ending point in the opposite direction. A positive ending inset may be useful if the arrow points to a dot." + }, + "insetStart": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The starting inset, a constant in pixels; defaults to 0. A positive inset shortens the arrow by moving the starting point towards the endpoint point, while a negative inset extends it by moving the starting point in the opposite direction. A positive starting inset may be useful if the arrow emerges from a dot." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "arrow", + "description": "An arrow mark, drawing (possibly swoopy) arrows connecting pairs of points.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "sweep": { + "anyOf": [ + { + "type": "number" + }, + { + "const": "+x", + "type": "string" + }, + { + "const": "-x", + "type": "string" + }, + { + "const": "+y", + "type": "string" + }, + { + "const": "-y", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The sweep order; defaults to 1 indicating a positive (clockwise) bend angle; -1 indicates a negative (anticlockwise) bend angle; 0 effectively clears the bend angle. If set to *-x*, the bend angle is flipped when the ending point is to the left of the starting point — ensuring all arrows bulge up (down if bend is negative); if set to *-y*, the bend angle is flipped when the ending point is above the starting point — ensuring all arrows bulge right (left if bend is negative); the sign is negated for\n*+x* and *+y*." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position, for vertical arrows; typically bound to the *x* scale; shorthand for setting defaults for both **x1** and **x2**." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position; typically bound to the *x* scale; also sets a default for **x2**." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position; typically bound to the *x* scale; also sets a default for **x1**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position, for horizontal arrows; typically bound to the *y* scale; shorthand for setting defaults for both **y1** and **y2**." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position; typically bound to the *y* scale; also sets a default for **y2**." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position; typically bound to the *y* scale; also sets a default for **y1**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Avg": { + "additionalProperties": false, + "properties": { + "avg": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the average (mean) value of the given column." + }, + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "avg" + ], + "type": "object" + }, + "AxisFx": { + "additionalProperties": false, + "description": "The axisFx mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisFx", + "description": "An axis mark to document the visual encoding of the horizontal facet position *fx* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to the *fx* scale’s domain; if desired, use one of the **ticks**,\n**tickSpacing**, or **interval** options.\n\nThe **facetAnchor** and **frameAnchor** options defaults to **anchor**. The default margins likewise depend on **anchor** as follows; in order of\n**marginTop**, **marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *top* - 30, 20, 0, 20\n- *bottom* - 0, 20, 30, 20\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; use the\n**transform** *y*-scale option to show thousands or millions; or use the\n**textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "AxisFy": { + "additionalProperties": false, + "description": "The axisFy mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisFy", + "description": "An axis mark to document the visual encoding of the vertical facet position *fy* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to the *fy* scale’s domain; if desired, use one of the **ticks**,\n**tickSpacing**, or **interval** options.\n\nThe **facetAnchor** option defaults to *right-empty* if **anchor** is\n*right*, and *left-empty* if **anchor** is *left*. The default margins likewise depend on **anchor** as follows; in order of **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *right* - 20, 40, 20, 0\n- *left* - 20, 0, 20, 40\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; or use the **textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "AxisX": { + "additionalProperties": false, + "description": "The axisX mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisX", + "description": "An axis mark to document the visual encoding of the horizontal position\n*x* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to tick values sampled from the *x* scale’s domain; if desired, use one of the **ticks**, **tickSpacing**, or **interval** options.\n\nThe **facetAnchor** option defaults to *bottom-empty* if **anchor** is\n*bottom*, and *top-empty* if **anchor** is *top*. The default margins likewise depend on **anchor** as follows; in order of **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *top* - 30, 20, 0, 20\n- *bottom* - 0, 20, 30, 20\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; use the\n**transform** *y*-scale option to show thousands or millions; or use the\n**textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "AxisY": { + "additionalProperties": false, + "description": "The axisY mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisY", + "description": "An axis mark to document the visual encoding of the vertical position *y* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to tick values sampled from the *y* scale’s domain; if desired, use one of the\n**ticks**, **tickSpacing**, or **interval** options.\n\nThe **facetAnchor** option defaults to *right-empty* if **anchor** is\n*right*, and *left-empty* if **anchor** is *left*. The default margins likewise depend on **anchor** as follows; in order of **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *right* - 20, 40, 20, 0\n- *left* - 20, 0, 20, 40\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; or use the **textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "BarX": { + "additionalProperties": false, + "description": "The barX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "barX", + "description": "A horizontal bar mark. The required *x* values should be quantitative or temporal, and the optional *y* values should be ordinal.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero.\n\nThe optional **y** ordinal channel specifies the vertical position; it is typically bound to the *y* scale, which must be a *band* scale. If the\n**y** channel is not specified, the bar will span the vertical extent of the plot’s frame.\n\nIf *y* is quantitative, use the rectX mark instead. If *x* is ordinal, use the cell mark instead.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional vertical position of the bar; a ordinal channel typically bound to the *y* scale. If not specified, the bar spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a rectX mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "BarY": { + "additionalProperties": false, + "description": "The barY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "barY", + "description": "A vertical bar mark. The required *y* values should be quantitative or temporal, and the optional *x* values should be ordinal.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero.\n\nThe optional **x** ordinal channel specifies the horizontal position; it is typically bound to the *x* scale, which must be a *band* scale. If the\n**x** channel is not specified, the bar will span the horizontal extent of the plot’s frame.\n\nIf *x* is quantitative, use the rectY mark instead. If *y* is ordinal, use the cell mark instead.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional horizontal position of the bar; a ordinal channel typically bound to the *x* scale. If not specified, the bar spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a rectY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) horizontal position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Bin": { + "additionalProperties": false, + "properties": { + "bin": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Bin a continuous variable into discrete intervals. The bin argument specifies a data column or expression to bin. Both numerical and temporal (date/time) values are supported." + }, + "interval": { + "$ref": "#/definitions/BinInterval", + "description": "The interval bin unit to use, typically used to indicate a date/time unit for binning temporal values, such as `hour`, `day`, or `month`. If `date`, the extent of data values is used to automatically select an interval for temporal data. The value `number` enforces normal numerical binning, even over temporal data. If unspecified, defaults to `number` for numerical data and `date` for temporal data." + }, + "minstep": { + "description": "The minimum allowed bin step size (default `0`) when performing numerical binning. For example, a setting of `1` prevents step sizes less than 1. This option is ignored when **step** is specified.", + "type": "number" + }, + "nice": { + "const": true, + "description": "A flag (default `true`) requesting \"nice\" human-friendly end points and step sizes when performing numerical binning. When **step** is specified, this option affects the binning end points (e.g., origin) only.", + "type": "boolean" + }, + "offset": { + "description": "Offset for computed bins (default `0`). For example, a value of `1` will result in using the next consecutive bin boundary.", + "type": "number" + }, + "step": { + "description": "The step size to use between bins. When binning numerical values (or interval type `number`), this setting specifies the numerical step size. For data/time intervals, this indicates the number of steps of that unit, such as hours, days, or years.", + "type": "number" + }, + "steps": { + "description": "The target number of binning steps to use. To accommodate human-friendly (\"nice\") bin boundaries, the actual number of bins may diverge from this exact value. This option is ignored when **step** is specified.", + "type": "number" + } + }, + "required": [ + "bin" + ], + "type": "object" + }, + "BinInterval": { + "description": "Binning interval names.", + "enum": [ + "date", + "number", + "millisecond", + "second", + "minute", + "hour", + "day", + "month", + "year" + ], + "type": "string" + }, + "BrushStyles": { + "additionalProperties": false, + "description": "Styles for rectangular selection brushes.", + "properties": { + "fill": { + "description": "The fill color of the brush rectangle.", + "type": "string" + }, + "fillOpacity": { + "description": "The fill opacity of the brush rectangle.", + "type": "number" + }, + "opacity": { + "description": "The overall opacity of the brush rectangle.", + "type": "number" + }, + "stroke": { + "description": "The stroke color of the brush rectangle.", + "type": "string" + }, + "strokeDasharray": { + "description": "The stroke dash array of the brush rectangle.", + "type": "string" + }, + "strokeOpacity": { + "description": "The stroke opacity of the brush rectangle.", + "type": "number" + } + }, + "type": "object" + }, + "CSSStyles": { + "additionalProperties": { + "type": "string" + }, + "properties": { + "accentColor": { + "type": "string" + }, + "alignContent": { + "type": "string" + }, + "alignItems": { + "type": "string" + }, + "alignSelf": { + "type": "string" + }, + "alignmentBaseline": { + "type": "string" + }, + "all": { + "type": "string" + }, + "animation": { + "type": "string" + }, + "animationComposition": { + "type": "string" + }, + "animationDelay": { + "type": "string" + }, + "animationDirection": { + "type": "string" + }, + "animationDuration": { + "type": "string" + }, + "animationFillMode": { + "type": "string" + }, + "animationIterationCount": { + "type": "string" + }, + "animationName": { + "type": "string" + }, + "animationPlayState": { + "type": "string" + }, + "animationTimingFunction": { + "type": "string" + }, + "appearance": { + "type": "string" + }, + "aspectRatio": { + "type": "string" + }, + "backdropFilter": { + "type": "string" + }, + "backfaceVisibility": { + "type": "string" + }, + "background": { + "type": "string" + }, + "backgroundAttachment": { + "type": "string" + }, + "backgroundBlendMode": { + "type": "string" + }, + "backgroundClip": { + "type": "string" + }, + "backgroundColor": { + "type": "string" + }, + "backgroundImage": { + "type": "string" + }, + "backgroundOrigin": { + "type": "string" + }, + "backgroundPosition": { + "type": "string" + }, + "backgroundPositionX": { + "type": "string" + }, + "backgroundPositionY": { + "type": "string" + }, + "backgroundRepeat": { + "type": "string" + }, + "backgroundSize": { + "type": "string" + }, + "baselineShift": { + "type": "string" + }, + "baselineSource": { + "type": "string" + }, + "blockSize": { + "type": "string" + }, + "border": { + "type": "string" + }, + "borderBlock": { + "type": "string" + }, + "borderBlockColor": { + "type": "string" + }, + "borderBlockEnd": { + "type": "string" + }, + "borderBlockEndColor": { + "type": "string" + }, + "borderBlockEndStyle": { + "type": "string" + }, + "borderBlockEndWidth": { + "type": "string" + }, + "borderBlockStart": { + "type": "string" + }, + "borderBlockStartColor": { + "type": "string" + }, + "borderBlockStartStyle": { + "type": "string" + }, + "borderBlockStartWidth": { + "type": "string" + }, + "borderBlockStyle": { + "type": "string" + }, + "borderBlockWidth": { + "type": "string" + }, + "borderBottom": { + "type": "string" + }, + "borderBottomColor": { + "type": "string" + }, + "borderBottomLeftRadius": { + "type": "string" + }, + "borderBottomRightRadius": { + "type": "string" + }, + "borderBottomStyle": { + "type": "string" + }, + "borderBottomWidth": { + "type": "string" + }, + "borderCollapse": { + "type": "string" + }, + "borderColor": { + "type": "string" + }, + "borderEndEndRadius": { + "type": "string" + }, + "borderEndStartRadius": { + "type": "string" + }, + "borderImage": { + "type": "string" + }, + "borderImageOutset": { + "type": "string" + }, + "borderImageRepeat": { + "type": "string" + }, + "borderImageSlice": { + "type": "string" + }, + "borderImageSource": { + "type": "string" + }, + "borderImageWidth": { + "type": "string" + }, + "borderInline": { + "type": "string" + }, + "borderInlineColor": { + "type": "string" + }, + "borderInlineEnd": { + "type": "string" + }, + "borderInlineEndColor": { + "type": "string" + }, + "borderInlineEndStyle": { + "type": "string" + }, + "borderInlineEndWidth": { + "type": "string" + }, + "borderInlineStart": { + "type": "string" + }, + "borderInlineStartColor": { + "type": "string" + }, + "borderInlineStartStyle": { + "type": "string" + }, + "borderInlineStartWidth": { + "type": "string" + }, + "borderInlineStyle": { + "type": "string" + }, + "borderInlineWidth": { + "type": "string" + }, + "borderLeft": { + "type": "string" + }, + "borderLeftColor": { + "type": "string" + }, + "borderLeftStyle": { + "type": "string" + }, + "borderLeftWidth": { + "type": "string" + }, + "borderRadius": { + "type": "string" + }, + "borderRight": { + "type": "string" + }, + "borderRightColor": { + "type": "string" + }, + "borderRightStyle": { + "type": "string" + }, + "borderRightWidth": { + "type": "string" + }, + "borderSpacing": { + "type": "string" + }, + "borderStartEndRadius": { + "type": "string" + }, + "borderStartStartRadius": { + "type": "string" + }, + "borderStyle": { + "type": "string" + }, + "borderTop": { + "type": "string" + }, + "borderTopColor": { + "type": "string" + }, + "borderTopLeftRadius": { + "type": "string" + }, + "borderTopRightRadius": { + "type": "string" + }, + "borderTopStyle": { + "type": "string" + }, + "borderTopWidth": { + "type": "string" + }, + "borderWidth": { + "type": "string" + }, + "bottom": { + "type": "string" + }, + "boxShadow": { + "type": "string" + }, + "boxSizing": { + "type": "string" + }, + "breakAfter": { + "type": "string" + }, + "breakBefore": { + "type": "string" + }, + "breakInside": { + "type": "string" + }, + "captionSide": { + "type": "string" + }, + "caretColor": { + "type": "string" + }, + "clear": { + "type": "string" + }, + "clip": { + "type": "string" + }, + "clipPath": { + "type": "string" + }, + "clipRule": { + "type": "string" + }, + "color": { + "type": "string" + }, + "colorInterpolation": { + "type": "string" + }, + "colorInterpolationFilters": { + "type": "string" + }, + "colorScheme": { + "type": "string" + }, + "columnCount": { + "type": "string" + }, + "columnFill": { + "type": "string" + }, + "columnGap": { + "type": "string" + }, + "columnRule": { + "type": "string" + }, + "columnRuleColor": { + "type": "string" + }, + "columnRuleStyle": { + "type": "string" + }, + "columnRuleWidth": { + "type": "string" + }, + "columnSpan": { + "type": "string" + }, + "columnWidth": { + "type": "string" + }, + "columns": { + "type": "string" + }, + "contain": { + "type": "string" + }, + "containIntrinsicBlockSize": { + "type": "string" + }, + "containIntrinsicHeight": { + "type": "string" + }, + "containIntrinsicInlineSize": { + "type": "string" + }, + "containIntrinsicSize": { + "type": "string" + }, + "containIntrinsicWidth": { + "type": "string" + }, + "container": { + "type": "string" + }, + "containerName": { + "type": "string" + }, + "containerType": { + "type": "string" + }, + "content": { + "type": "string" + }, + "contentVisibility": { + "type": "string" + }, + "counterIncrement": { + "type": "string" + }, + "counterReset": { + "type": "string" + }, + "counterSet": { + "type": "string" + }, + "cssFloat": { + "type": "string" + }, + "cssText": { + "type": "string" + }, + "cursor": { + "type": "string" + }, + "cx": { + "type": "string" + }, + "cy": { + "type": "string" + }, + "d": { + "type": "string" + }, + "direction": { + "type": "string" + }, + "display": { + "type": "string" + }, + "dominantBaseline": { + "type": "string" + }, + "emptyCells": { + "type": "string" + }, + "fill": { + "type": "string" + }, + "fillOpacity": { + "type": "string" + }, + "fillRule": { + "type": "string" + }, + "filter": { + "type": "string" + }, + "flex": { + "type": "string" + }, + "flexBasis": { + "type": "string" + }, + "flexDirection": { + "type": "string" + }, + "flexFlow": { + "type": "string" + }, + "flexGrow": { + "type": "string" + }, + "flexShrink": { + "type": "string" + }, + "flexWrap": { + "type": "string" + }, + "float": { + "type": "string" + }, + "floodColor": { + "type": "string" + }, + "floodOpacity": { + "type": "string" + }, + "font": { + "type": "string" + }, + "fontFamily": { + "type": "string" + }, + "fontFeatureSettings": { + "type": "string" + }, + "fontKerning": { + "type": "string" + }, + "fontOpticalSizing": { + "type": "string" + }, + "fontPalette": { + "type": "string" + }, + "fontSize": { + "type": "string" + }, + "fontSizeAdjust": { + "type": "string" + }, + "fontStretch": { + "type": "string" + }, + "fontStyle": { + "type": "string" + }, + "fontSynthesis": { + "type": "string" + }, + "fontSynthesisSmallCaps": { + "type": "string" + }, + "fontSynthesisStyle": { + "type": "string" + }, + "fontSynthesisWeight": { + "type": "string" + }, + "fontVariant": { + "type": "string" + }, + "fontVariantAlternates": { + "type": "string" + }, + "fontVariantCaps": { + "type": "string" + }, + "fontVariantEastAsian": { + "type": "string" + }, + "fontVariantLigatures": { + "type": "string" + }, + "fontVariantNumeric": { + "type": "string" + }, + "fontVariantPosition": { + "type": "string" + }, + "fontVariationSettings": { + "type": "string" + }, + "fontWeight": { + "type": "string" + }, + "forcedColorAdjust": { + "type": "string" + }, + "gap": { + "type": "string" + }, + "grid": { + "type": "string" + }, + "gridArea": { + "type": "string" + }, + "gridAutoColumns": { + "type": "string" + }, + "gridAutoFlow": { + "type": "string" + }, + "gridAutoRows": { + "type": "string" + }, + "gridColumn": { + "type": "string" + }, + "gridColumnEnd": { + "type": "string" + }, + "gridColumnGap": { + "type": "string" + }, + "gridColumnStart": { + "type": "string" + }, + "gridGap": { + "type": "string" + }, + "gridRow": { + "type": "string" + }, + "gridRowEnd": { + "type": "string" + }, + "gridRowGap": { + "type": "string" + }, + "gridRowStart": { + "type": "string" + }, + "gridTemplate": { + "type": "string" + }, + "gridTemplateAreas": { + "type": "string" + }, + "gridTemplateColumns": { + "type": "string" + }, + "gridTemplateRows": { + "type": "string" + }, + "height": { + "type": "string" + }, + "hyphenateCharacter": { + "type": "string" + }, + "hyphens": { + "type": "string" + }, + "imageOrientation": { + "type": "string" + }, + "imageRendering": { + "type": "string" + }, + "inlineSize": { + "type": "string" + }, + "inset": { + "type": "string" + }, + "insetBlock": { + "type": "string" + }, + "insetBlockEnd": { + "type": "string" + }, + "insetBlockStart": { + "type": "string" + }, + "insetInline": { + "type": "string" + }, + "insetInlineEnd": { + "type": "string" + }, + "insetInlineStart": { + "type": "string" + }, + "isolation": { + "type": "string" + }, + "justifyContent": { + "type": "string" + }, + "justifyItems": { + "type": "string" + }, + "justifySelf": { + "type": "string" + }, + "left": { + "type": "string" + }, + "length": { + "type": "number" + }, + "letterSpacing": { + "type": "string" + }, + "lightingColor": { + "type": "string" + }, + "lineBreak": { + "type": "string" + }, + "lineHeight": { + "type": "string" + }, + "listStyle": { + "type": "string" + }, + "listStyleImage": { + "type": "string" + }, + "listStylePosition": { + "type": "string" + }, + "listStyleType": { + "type": "string" + }, + "margin": { + "type": "string" + }, + "marginBlock": { + "type": "string" + }, + "marginBlockEnd": { + "type": "string" + }, + "marginBlockStart": { + "type": "string" + }, + "marginBottom": { + "type": "string" + }, + "marginInline": { + "type": "string" + }, + "marginInlineEnd": { + "type": "string" + }, + "marginInlineStart": { + "type": "string" + }, + "marginLeft": { + "type": "string" + }, + "marginRight": { + "type": "string" + }, + "marginTop": { + "type": "string" + }, + "marker": { + "type": "string" + }, + "markerEnd": { + "type": "string" + }, + "markerMid": { + "type": "string" + }, + "markerStart": { + "type": "string" + }, + "mask": { + "type": "string" + }, + "maskClip": { + "type": "string" + }, + "maskComposite": { + "type": "string" + }, + "maskImage": { + "type": "string" + }, + "maskMode": { + "type": "string" + }, + "maskOrigin": { + "type": "string" + }, + "maskPosition": { + "type": "string" + }, + "maskRepeat": { + "type": "string" + }, + "maskSize": { + "type": "string" + }, + "maskType": { + "type": "string" + }, + "mathDepth": { + "type": "string" + }, + "mathStyle": { + "type": "string" + }, + "maxBlockSize": { + "type": "string" + }, + "maxHeight": { + "type": "string" + }, + "maxInlineSize": { + "type": "string" + }, + "maxWidth": { + "type": "string" + }, + "minBlockSize": { + "type": "string" + }, + "minHeight": { + "type": "string" + }, + "minInlineSize": { + "type": "string" + }, + "minWidth": { + "type": "string" + }, + "mixBlendMode": { + "type": "string" + }, + "objectFit": { + "type": "string" + }, + "objectPosition": { + "type": "string" + }, + "offset": { + "type": "string" + }, + "offsetAnchor": { + "type": "string" + }, + "offsetDistance": { + "type": "string" + }, + "offsetPath": { + "type": "string" + }, + "offsetPosition": { + "type": "string" + }, + "offsetRotate": { + "type": "string" + }, + "opacity": { + "type": "string" + }, + "order": { + "type": "string" + }, + "orphans": { + "type": "string" + }, + "outline": { + "type": "string" + }, + "outlineColor": { + "type": "string" + }, + "outlineOffset": { + "type": "string" + }, + "outlineStyle": { + "type": "string" + }, + "outlineWidth": { + "type": "string" + }, + "overflow": { + "type": "string" + }, + "overflowAnchor": { + "type": "string" + }, + "overflowClipMargin": { + "type": "string" + }, + "overflowWrap": { + "type": "string" + }, + "overflowX": { + "type": "string" + }, + "overflowY": { + "type": "string" + }, + "overscrollBehavior": { + "type": "string" + }, + "overscrollBehaviorBlock": { + "type": "string" + }, + "overscrollBehaviorInline": { + "type": "string" + }, + "overscrollBehaviorX": { + "type": "string" + }, + "overscrollBehaviorY": { + "type": "string" + }, + "padding": { + "type": "string" + }, + "paddingBlock": { + "type": "string" + }, + "paddingBlockEnd": { + "type": "string" + }, + "paddingBlockStart": { + "type": "string" + }, + "paddingBottom": { + "type": "string" + }, + "paddingInline": { + "type": "string" + }, + "paddingInlineEnd": { + "type": "string" + }, + "paddingInlineStart": { + "type": "string" + }, + "paddingLeft": { + "type": "string" + }, + "paddingRight": { + "type": "string" + }, + "paddingTop": { + "type": "string" + }, + "page": { + "type": "string" + }, + "pageBreakAfter": { + "type": "string" + }, + "pageBreakBefore": { + "type": "string" + }, + "pageBreakInside": { + "type": "string" + }, + "paintOrder": { + "type": "string" + }, + "perspective": { + "type": "string" + }, + "perspectiveOrigin": { + "type": "string" + }, + "placeContent": { + "type": "string" + }, + "placeItems": { + "type": "string" + }, + "placeSelf": { + "type": "string" + }, + "pointerEvents": { + "type": "string" + }, + "position": { + "type": "string" + }, + "printColorAdjust": { + "type": "string" + }, + "quotes": { + "type": "string" + }, + "r": { + "type": "string" + }, + "resize": { + "type": "string" + }, + "right": { + "type": "string" + }, + "rotate": { + "type": "string" + }, + "rowGap": { + "type": "string" + }, + "rubyAlign": { + "type": "string" + }, + "rubyPosition": { + "type": "string" + }, + "rx": { + "type": "string" + }, + "ry": { + "type": "string" + }, + "scale": { + "type": "string" + }, + "scrollBehavior": { + "type": "string" + }, + "scrollMargin": { + "type": "string" + }, + "scrollMarginBlock": { + "type": "string" + }, + "scrollMarginBlockEnd": { + "type": "string" + }, + "scrollMarginBlockStart": { + "type": "string" + }, + "scrollMarginBottom": { + "type": "string" + }, + "scrollMarginInline": { + "type": "string" + }, + "scrollMarginInlineEnd": { + "type": "string" + }, + "scrollMarginInlineStart": { + "type": "string" + }, + "scrollMarginLeft": { + "type": "string" + }, + "scrollMarginRight": { + "type": "string" + }, + "scrollMarginTop": { + "type": "string" + }, + "scrollPadding": { + "type": "string" + }, + "scrollPaddingBlock": { + "type": "string" + }, + "scrollPaddingBlockEnd": { + "type": "string" + }, + "scrollPaddingBlockStart": { + "type": "string" + }, + "scrollPaddingBottom": { + "type": "string" + }, + "scrollPaddingInline": { + "type": "string" + }, + "scrollPaddingInlineEnd": { + "type": "string" + }, + "scrollPaddingInlineStart": { + "type": "string" + }, + "scrollPaddingLeft": { + "type": "string" + }, + "scrollPaddingRight": { + "type": "string" + }, + "scrollPaddingTop": { + "type": "string" + }, + "scrollSnapAlign": { + "type": "string" + }, + "scrollSnapStop": { + "type": "string" + }, + "scrollSnapType": { + "type": "string" + }, + "scrollbarColor": { + "type": "string" + }, + "scrollbarGutter": { + "type": "string" + }, + "scrollbarWidth": { + "type": "string" + }, + "shapeImageThreshold": { + "type": "string" + }, + "shapeMargin": { + "type": "string" + }, + "shapeOutside": { + "type": "string" + }, + "shapeRendering": { + "type": "string" + }, + "stopColor": { + "type": "string" + }, + "stopOpacity": { + "type": "string" + }, + "stroke": { + "type": "string" + }, + "strokeDasharray": { + "type": "string" + }, + "strokeDashoffset": { + "type": "string" + }, + "strokeLinecap": { + "type": "string" + }, + "strokeLinejoin": { + "type": "string" + }, + "strokeMiterlimit": { + "type": "string" + }, + "strokeOpacity": { + "type": "string" + }, + "strokeWidth": { + "type": "string" + }, + "tabSize": { + "type": "string" + }, + "tableLayout": { + "type": "string" + }, + "textAlign": { + "type": "string" + }, + "textAlignLast": { + "type": "string" + }, + "textAnchor": { + "type": "string" + }, + "textCombineUpright": { + "type": "string" + }, + "textDecoration": { + "type": "string" + }, + "textDecorationColor": { + "type": "string" + }, + "textDecorationLine": { + "type": "string" + }, + "textDecorationSkipInk": { + "type": "string" + }, + "textDecorationStyle": { + "type": "string" + }, + "textDecorationThickness": { + "type": "string" + }, + "textEmphasis": { + "type": "string" + }, + "textEmphasisColor": { + "type": "string" + }, + "textEmphasisPosition": { + "type": "string" + }, + "textEmphasisStyle": { + "type": "string" + }, + "textIndent": { + "type": "string" + }, + "textOrientation": { + "type": "string" + }, + "textOverflow": { + "type": "string" + }, + "textRendering": { + "type": "string" + }, + "textShadow": { + "type": "string" + }, + "textTransform": { + "type": "string" + }, + "textUnderlineOffset": { + "type": "string" + }, + "textUnderlinePosition": { + "type": "string" + }, + "textWrap": { + "type": "string" + }, + "textWrapMode": { + "type": "string" + }, + "textWrapStyle": { + "type": "string" + }, + "top": { + "type": "string" + }, + "touchAction": { + "type": "string" + }, + "transform": { + "type": "string" + }, + "transformBox": { + "type": "string" + }, + "transformOrigin": { + "type": "string" + }, + "transformStyle": { + "type": "string" + }, + "transition": { + "type": "string" + }, + "transitionBehavior": { + "type": "string" + }, + "transitionDelay": { + "type": "string" + }, + "transitionDuration": { + "type": "string" + }, + "transitionProperty": { + "type": "string" + }, + "transitionTimingFunction": { + "type": "string" + }, + "translate": { + "type": "string" + }, + "unicodeBidi": { + "type": "string" + }, + "userSelect": { + "type": "string" + }, + "vectorEffect": { + "type": "string" + }, + "verticalAlign": { + "type": "string" + }, + "viewTransitionName": { + "type": "string" + }, + "visibility": { + "type": "string" + }, + "webkitAlignContent": { + "type": "string" + }, + "webkitAlignItems": { + "type": "string" + }, + "webkitAlignSelf": { + "type": "string" + }, + "webkitAnimation": { + "type": "string" + }, + "webkitAnimationDelay": { + "type": "string" + }, + "webkitAnimationDirection": { + "type": "string" + }, + "webkitAnimationDuration": { + "type": "string" + }, + "webkitAnimationFillMode": { + "type": "string" + }, + "webkitAnimationIterationCount": { + "type": "string" + }, + "webkitAnimationName": { + "type": "string" + }, + "webkitAnimationPlayState": { + "type": "string" + }, + "webkitAnimationTimingFunction": { + "type": "string" + }, + "webkitAppearance": { + "type": "string" + }, + "webkitBackfaceVisibility": { + "type": "string" + }, + "webkitBackgroundClip": { + "type": "string" + }, + "webkitBackgroundOrigin": { + "type": "string" + }, + "webkitBackgroundSize": { + "type": "string" + }, + "webkitBorderBottomLeftRadius": { + "type": "string" + }, + "webkitBorderBottomRightRadius": { + "type": "string" + }, + "webkitBorderRadius": { + "type": "string" + }, + "webkitBorderTopLeftRadius": { + "type": "string" + }, + "webkitBorderTopRightRadius": { + "type": "string" + }, + "webkitBoxAlign": { + "type": "string" + }, + "webkitBoxFlex": { + "type": "string" + }, + "webkitBoxOrdinalGroup": { + "type": "string" + }, + "webkitBoxOrient": { + "type": "string" + }, + "webkitBoxPack": { + "type": "string" + }, + "webkitBoxShadow": { + "type": "string" + }, + "webkitBoxSizing": { + "type": "string" + }, + "webkitFilter": { + "type": "string" + }, + "webkitFlex": { + "type": "string" + }, + "webkitFlexBasis": { + "type": "string" + }, + "webkitFlexDirection": { + "type": "string" + }, + "webkitFlexFlow": { + "type": "string" + }, + "webkitFlexGrow": { + "type": "string" + }, + "webkitFlexShrink": { + "type": "string" + }, + "webkitFlexWrap": { + "type": "string" + }, + "webkitJustifyContent": { + "type": "string" + }, + "webkitLineClamp": { + "type": "string" + }, + "webkitMask": { + "type": "string" + }, + "webkitMaskBoxImage": { + "type": "string" + }, + "webkitMaskBoxImageOutset": { + "type": "string" + }, + "webkitMaskBoxImageRepeat": { + "type": "string" + }, + "webkitMaskBoxImageSlice": { + "type": "string" + }, + "webkitMaskBoxImageSource": { + "type": "string" + }, + "webkitMaskBoxImageWidth": { + "type": "string" + }, + "webkitMaskClip": { + "type": "string" + }, + "webkitMaskComposite": { + "type": "string" + }, + "webkitMaskImage": { + "type": "string" + }, + "webkitMaskOrigin": { + "type": "string" + }, + "webkitMaskPosition": { + "type": "string" + }, + "webkitMaskRepeat": { + "type": "string" + }, + "webkitMaskSize": { + "type": "string" + }, + "webkitOrder": { + "type": "string" + }, + "webkitPerspective": { + "type": "string" + }, + "webkitPerspectiveOrigin": { + "type": "string" + }, + "webkitTextFillColor": { + "type": "string" + }, + "webkitTextSizeAdjust": { + "type": "string" + }, + "webkitTextStroke": { + "type": "string" + }, + "webkitTextStrokeColor": { + "type": "string" + }, + "webkitTextStrokeWidth": { + "type": "string" + }, + "webkitTransform": { + "type": "string" + }, + "webkitTransformOrigin": { + "type": "string" + }, + "webkitTransformStyle": { + "type": "string" + }, + "webkitTransition": { + "type": "string" + }, + "webkitTransitionDelay": { + "type": "string" + }, + "webkitTransitionDuration": { + "type": "string" + }, + "webkitTransitionProperty": { + "type": "string" + }, + "webkitTransitionTimingFunction": { + "type": "string" + }, + "webkitUserSelect": { + "type": "string" + }, + "whiteSpace": { + "type": "string" + }, + "whiteSpaceCollapse": { + "type": "string" + }, + "widows": { + "type": "string" + }, + "width": { + "type": "string" + }, + "willChange": { + "type": "string" + }, + "wordBreak": { + "type": "string" + }, + "wordSpacing": { + "type": "string" + }, + "wordWrap": { + "type": "string" + }, + "writingMode": { + "type": "string" + }, + "x": { + "type": "string" + }, + "y": { + "type": "string" + }, + "zIndex": { + "type": "string" + }, + "zoom": { + "type": "string" + } + }, + "type": "object" + }, + "Cell": { + "additionalProperties": false, + "description": "The cell mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "cell", + "description": "A rectangular cell mark. Along with **x** and/or **y**, a **fill** channel is typically specified to encode value as color.\n\nIf neither **x** nor **y** are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*,\n*x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n\nBoth **x** and **y** should be ordinal; if only **x** is quantitative (or temporal), use a barX mark; if only **y** is quantitative, use a barY mark; if both are quantitative, use a rect mark.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the cell; an optional ordinal channel typically bound to the *x* scale. If not specified, the cell spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a barX mark instead; if *y* is also quantitative or temporal, use a rect mark." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the cell; an optional ordinal channel typically bound to the *y* scale. If not specified, the cell spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a barY mark instead; if *x* is also quantitative or temporal, use a rect mark." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "CellX": { + "additionalProperties": false, + "description": "The cellX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "cellX", + "description": "Like cell, but **x** defaults to the zero-based index [0, 1, 2, …], and if\n**stroke** is not a channel, **fill** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the cell; an optional ordinal channel typically bound to the *x* scale. If not specified, the cell spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a barX mark instead; if *y* is also quantitative or temporal, use a rect mark." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the cell; an optional ordinal channel typically bound to the *y* scale. If not specified, the cell spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a barY mark instead; if *x* is also quantitative or temporal, use a rect mark." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "CellY": { + "additionalProperties": false, + "description": "The cellY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "cellY", + "description": "Like cell, but **y** defaults to the zero-based index [0, 1, 2, …], and if\n**stroke** is not a channel, **fill** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the cell; an optional ordinal channel typically bound to the *x* scale. If not specified, the cell spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a barX mark instead; if *y* is also quantitative or temporal, use a rect mark." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the cell; an optional ordinal channel typically bound to the *y* scale. If not specified, the cell spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a barY mark instead; if *x* is also quantitative or temporal, use a rect mark." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Centroid": { + "additionalProperties": false, + "properties": { + "centroid": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the 2D centroid of geometry-typed data. This transform requires the DuckDB `spatial` extension." + } + }, + "required": [ + "centroid" + ], + "type": "object" + }, + "CentroidX": { + "additionalProperties": false, + "properties": { + "centroidX": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the centroid x-coordinate of geometry-typed data. This transform requires the DuckDB `spatial` extension." + } + }, + "required": [ + "centroidX" + ], + "type": "object" + }, + "CentroidY": { + "additionalProperties": false, + "properties": { + "centroidY": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the centroid y-coordinate of geometry-typed data. This transform requires the DuckDB `spatial` extension." + } + }, + "required": [ + "centroidY" + ], + "type": "object" + }, + "ChannelDomainSort": { + "additionalProperties": false, + "description": "How to impute scale domains from channel values.", + "properties": { + "color": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "fx": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "fy": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "length": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "limit": { + "anyOf": [ + { + "type": "number" + }, + { + "items": [ + { + "title": "lo", + "type": "number" + }, + { + "title": "hi", + "type": "number" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + ], + "description": "If a positive number, limit the domain to the first *n* sorted values. If a negative number, limit the domain to the last *-n* sorted values. Hence, a positive **limit** with **reverse** true will return the top *n* values in descending order.\n\nIf an array [*lo*, *hi*], slices the sorted domain from *lo* (inclusive) to\n*hi* (exclusive). As with [*array*.slice][1], if either *lo* or *hi* are negative, it indicates an offset from the end of the array; if *lo* is undefined it defaults to 0, and if *hi* is undefined it defaults to Infinity.\n\nNote: limiting the imputed domain of one scale, say *x*, does not affect the imputed domain of another scale, say *y*; each scale domain is imputed independently.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice" + }, + "opacity": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "order": { + "description": "How to order reduced values.", + "enum": [ + "ascending", + "descending", + null + ], + "type": [ + "string", + "null" + ] + }, + "r": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "reduce": { + "anyOf": [ + { + "$ref": "#/definitions/Reducer" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "How to produce a singular value (for subsequent sorting) from aggregated channel values; one of:\n\n- true (default) - alias for *max*\n- false or null - disabled; don’t impute the scale domain\n- a named reducer implementation such as *count* or *sum*\n- a function that takes an array of values and returns the reduced value\n- an object that implements the *reduceIndex* method" + }, + "reverse": { + "description": "If true, reverse the order after sorting.", + "type": "boolean" + }, + "symbol": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "x": { + "$ref": "#/definitions/ChannelDomainValueSpec" + }, + "y": { + "$ref": "#/definitions/ChannelDomainValueSpec" + } + }, + "type": "object" + }, + "ChannelDomainValue": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/ChannelName" + }, + { + "const": "data", + "type": "string" + }, + { + "const": "width", + "type": "string" + }, + { + "const": "height", + "type": "string" + } + ], + "description": "A channel name, or an implied one for domain sorting." + }, + { + "const": "-ariaLabel", + "type": "string" + }, + { + "const": "-fill", + "type": "string" + }, + { + "const": "-fillOpacity", + "type": "string" + }, + { + "const": "-fontSize", + "type": "string" + }, + { + "const": "-fx", + "type": "string" + }, + { + "const": "-fy", + "type": "string" + }, + { + "const": "-geometry", + "type": "string" + }, + { + "const": "-height", + "type": "string" + }, + { + "const": "-href", + "type": "string" + }, + { + "const": "-length", + "type": "string" + }, + { + "const": "-opacity", + "type": "string" + }, + { + "const": "-path", + "type": "string" + }, + { + "const": "-r", + "type": "string" + }, + { + "const": "-rotate", + "type": "string" + }, + { + "const": "-src", + "type": "string" + }, + { + "const": "-stroke", + "type": "string" + }, + { + "const": "-strokeOpacity", + "type": "string" + }, + { + "const": "-strokeWidth", + "type": "string" + }, + { + "const": "-symbol", + "type": "string" + }, + { + "const": "-text", + "type": "string" + }, + { + "const": "-title", + "type": "string" + }, + { + "const": "-weight", + "type": "string" + }, + { + "const": "-width", + "type": "string" + }, + { + "const": "-x", + "type": "string" + }, + { + "const": "-x1", + "type": "string" + }, + { + "const": "-x2", + "type": "string" + }, + { + "const": "-y", + "type": "string" + }, + { + "const": "-y1", + "type": "string" + }, + { + "const": "-y2", + "type": "string" + }, + { + "const": "-z", + "type": "string" + }, + { + "const": "-data", + "type": "string" + }, + { + "type": "null" + } + ], + "description": "The available inputs for imputing scale domains. In addition to a named channel, an input may be specified as:\n\n- *data* - impute from mark data\n- *width* - impute from |*x2* - *x1*|\n- *height* - impute from |*y2* - *y1*|\n- null - impute from input order\n\nIf the *x* channel is not defined, the *x2* channel will be used instead if available, and similarly for *y* and *y2*; this is useful for marks that implicitly stack. The *data* input is typically used in conjunction with a custom **reduce** function, as when the built-in single-channel reducers are insufficient." + }, + "ChannelDomainValueSpec": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelDomainValue" + }, + { + "additionalProperties": false, + "properties": { + "limit": { + "anyOf": [ + { + "type": "number" + }, + { + "items": [ + { + "title": "lo", + "type": "number" + }, + { + "title": "hi", + "type": "number" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + } + ], + "description": "If a positive number, limit the domain to the first *n* sorted values. If a negative number, limit the domain to the last *-n* sorted values. Hence, a positive **limit** with **reverse** true will return the top *n* values in descending order.\n\nIf an array [*lo*, *hi*], slices the sorted domain from *lo* (inclusive) to\n*hi* (exclusive). As with [*array*.slice][1], if either *lo* or *hi* are negative, it indicates an offset from the end of the array; if *lo* is undefined it defaults to 0, and if *hi* is undefined it defaults to Infinity.\n\nNote: limiting the imputed domain of one scale, say *x*, does not affect the imputed domain of another scale, say *y*; each scale domain is imputed independently.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice" + }, + "order": { + "description": "How to order reduced values.", + "enum": [ + "ascending", + "descending", + null + ], + "type": [ + "string", + "null" + ] + }, + "reduce": { + "anyOf": [ + { + "$ref": "#/definitions/Reducer" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ], + "description": "How to produce a singular value (for subsequent sorting) from aggregated channel values; one of:\n\n- true (default) - alias for *max*\n- false or null - disabled; don’t impute the scale domain\n- a named reducer implementation such as *count* or *sum*\n- a function that takes an array of values and returns the reduced value\n- an object that implements the *reduceIndex* method" + }, + "reverse": { + "description": "If true, reverse the order after sorting.", + "type": "boolean" + }, + "value": { + "$ref": "#/definitions/ChannelDomainValue" + } + }, + "required": [ + "value" + ], + "type": "object" + } + ], + "description": "How to derive a scale’s domain from a channel’s values." + }, + "ChannelName": { + "description": "The set of known channel names.", + "enum": [ + "ariaLabel", + "fill", + "fillOpacity", + "fontSize", + "fx", + "fy", + "geometry", + "height", + "href", + "length", + "opacity", + "path", + "r", + "rotate", + "src", + "stroke", + "strokeOpacity", + "strokeWidth", + "symbol", + "text", + "title", + "weight", + "width", + "x", + "x1", + "x2", + "y", + "y1", + "y2", + "z" + ], + "type": "string" + }, + "ChannelValue": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/Transform" + }, + { + "$ref": "#/definitions/SQLExpression" + }, + { + "$ref": "#/definitions/AggregateExpression" + } + ], + "description": "A channel’s values may be expressed as:\n\n- a field name, to extract the corresponding value for each datum\n- an iterable of values, typically of the same length as the data\n- a channel transform or SQL expression\n- a constant number or boolean\n- null to represent no value" + }, + "ChannelValueIntervalSpec": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "additionalProperties": false, + "properties": { + "interval": { + "$ref": "#/definitions/Interval" + }, + "value": { + "$ref": "#/definitions/ChannelValue" + } + }, + "required": [ + "value", + "interval" + ], + "type": "object" + } + ], + "description": "In some contexts, when specifying a mark channel’s value, you can provide a {value, interval} object to specify an associated interval." + }, + "ChannelValueSpec": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "scale": { + "anyOf": [ + { + "$ref": "#/definitions/ScaleName" + }, + { + "const": "auto", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + } + ] + }, + "value": { + "$ref": "#/definitions/ChannelValue" + } + }, + "required": [ + "value" + ], + "type": "object" + } + ], + "description": "When specifying a mark channel’s value, you can provide a {value, scale} object to override the scale that would normally be associated with the channel." + }, + "Circle": { + "additionalProperties": false, + "description": "The circle mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "circle", + "description": "Like dot, except that the **symbol** option is set to *circle*.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "ColorScaleType": { + "description": "The supported scale types for *color* encodings.\n\nFor quantitative data, one of:\n\n- *linear* (default) - linear transform (translate and scale)\n- *pow* - power (exponential) transform\n- *sqrt* - square-root transform; *pow* with *exponent* = 0.5\n- *log* - logarithmic transform\n- *symlog* - bi-symmetric logarithmic transform per Webber et al.\n\nFor temporal data, one of:\n\n- *utc* (default, recommended) - UTC time\n- *time* - local time\n\nFor ordinal data, one of:\n\n- *ordinal* - from discrete inputs to discrete outputs\n\nFor color, one of:\n\n- *categorical* - equivalent to *ordinal*; defaults to *observable10*\n- *sequential* - equivalent to *linear*; defaults to *turbo*\n- *cyclical* - equivalent to *linear*; defaults to *rainbow*\n- *threshold* - encodes using discrete thresholds; defaults to *rdylbu*\n- *quantile* - encodes using quantile thresholds; defaults to *rdylbu*\n- *quantize* - uniformly quantizes a continuous domain; defaults to *rdylbu*\n- *diverging* - *linear*, but with a pivot; defaults to *rdbu*\n- *diverging-log* - *log*, but with a pivot; defaults to *rdbu*\n- *diverging-pow* - *pow*, but with a pivot; defaults to *rdbu*\n- *diverging-sqrt* - *sqrt*, but with a pivot; defaults to *rdbu*\n- *diverging-symlog* - *symlog*, but with a pivot; defaults to *rdbu*\n\nOther scale types:\n\n- *identity* - do not transform values when encoding", + "enum": [ + "linear", + "pow", + "sqrt", + "log", + "symlog", + "utc", + "time", + "point", + "band", + "ordinal", + "sequential", + "cyclical", + "diverging", + "diverging-log", + "diverging-pow", + "diverging-sqrt", + "diverging-symlog", + "categorical", + "threshold", + "quantile", + "quantize", + "identity" + ], + "type": "string" + }, + "ColorScheme": { + "anyOf": [ + { + "description": "The built-in color schemes, cased.", + "enum": [ + "Accent", + "Category10", + "Dark2", + "Observable10", + "Paired", + "Pastel1", + "Pastel2", + "Set1", + "Set2", + "Set3", + "Tableau10", + "BrBG", + "PRGn", + "PiYG", + "PuOr", + "RdBu", + "RdGy", + "RdYlBu", + "RdYlGn", + "Spectral", + "BuRd", + "BuYlRd", + "Blues", + "Greens", + "Greys", + "Oranges", + "Purples", + "Reds", + "Turbo", + "Viridis", + "Magma", + "Inferno", + "Plasma", + "Cividis", + "Cubehelix", + "Warm", + "Cool", + "BuGn", + "BuPu", + "GnBu", + "OrRd", + "PuBu", + "PuBuGn", + "PuRd", + "RdPu", + "YlGn", + "YlGnBu", + "YlOrBr", + "YlOrRd", + "Rainbow", + "Sinebow" + ], + "type": "string" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + }, + { + "properties": {}, + "type": "object" + } + ], + "description": "The built-in color schemes. For categorical data, one of:\n\n- *Accent* - eight colors\n- *Category10* - ten colors\n- *Dark2* - eight colors\n- *Observable10* (default) - ten colors\n- *Paired* - twelve paired colors\n- *Pastel1* - nine colors\n- *Pastel2* - eight colors\n- *Set1* - nine colors\n- *Set2* - eight colors\n- *Set3* - twelve colors\n- *Tableau10* - ten colors\n\nFor diverging data, one of:\n\n- *BrBG* - from brown to white to blue-green\n- *PRGn* - from purple to white to green\n- *PiYG* - from pink to white to yellow-green\n- *PuOr* - from purple to white to orange\n- *RdBu* (default) - from red to white to blue\n- *RdGy* - from red to white to gray\n- *RdYlBu* - from red to yellow to blue\n- *RdYlGn* - from red to yellow to green\n- *Spectral* - from red to blue, through the spectrum\n- *BuRd* - from blue to white to red\n- *BuYlRd* - from blue to yellow to red\n\nFor sequential data, one of:\n\n- *Blues* - from white to blue\n- *Greens* - from white to green\n- *Greys* - from white to gray\n- *Oranges* - from white to orange\n- *Purples* - from white to purple\n- *Reds* - from white to red\n- *Turbo* (default) - from blue to red, through the spectrum\n- *Viridis* - from blue to green to yellow\n- *Magma* - from purple to orange to yellow\n- *Inferno* - from purple to orange to yellow\n- *Plasma* - from purple to orange to yellow\n- *Cividis* - from blue to yellow\n- *Cubehelix* - from black to white, rotating hue\n- *Warm* - from purple to green, through warm hues\n- *Cool* - from green to to purple, through cool hues\n- *BuGn* - from light blue to dark green\n- *BuPu* - from light blue to dark purple\n- *GnBu* - from light green to dark blue\n- *OrRd* - from light orange to dark red\n- *PuBu* - from light purple to dark blue\n- *PuBuGn* - from light purple to blue to dark green\n- *PuRd* - from light purple to dark red\n- *RdPu* - from light red to dark purple\n- *YlGn* - from light yellow to dark green\n- *YlGnBu* - from light yellow to green to dark blue\n- *YlOrBr* - from light yellow to orange to dark brown\n- *YlOrRd* - from light yellow to orange to dark red\n\nFor cyclical data, one of:\n\n- *Rainbow* (default) - the less-angry rainbow color scheme\n- *Sinebow* - Bumgardner and Loyd’s “sinebow” scheme" + }, + "Column": { + "additionalProperties": false, + "properties": { + "column": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Intpret a string or param-value as a column reference." + } + }, + "required": [ + "column" + ], + "type": "object" + }, + "ColumnTransform": { + "anyOf": [ + { + "$ref": "#/definitions/Bin" + }, + { + "$ref": "#/definitions/Column" + }, + { + "$ref": "#/definitions/DateMonth" + }, + { + "$ref": "#/definitions/DateMonthDay" + }, + { + "$ref": "#/definitions/DateDay" + }, + { + "$ref": "#/definitions/Centroid" + }, + { + "$ref": "#/definitions/CentroidX" + }, + { + "$ref": "#/definitions/CentroidY" + }, + { + "$ref": "#/definitions/GeoJSON" + } + ], + "description": "A data transform that maps one column value to another." + }, + "Component": { + "anyOf": [ + { + "$ref": "#/definitions/HConcat" + }, + { + "$ref": "#/definitions/VConcat" + }, + { + "$ref": "#/definitions/HSpace" + }, + { + "$ref": "#/definitions/VSpace" + }, + { + "$ref": "#/definitions/Menu" + }, + { + "$ref": "#/definitions/Search" + }, + { + "$ref": "#/definitions/Slider" + }, + { + "$ref": "#/definitions/Table" + }, + { + "$ref": "#/definitions/Plot" + }, + { + "$ref": "#/definitions/PlotMark" + }, + { + "$ref": "#/definitions/Legend" + } + ], + "description": "A specifcation component such as a plot, input widget, or layout." + }, + "Config": { + "description": "Configuration options.", + "properties": { + "extensions": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ] + } + }, + "type": "object" + }, + "ContinuousScaleType": { + "description": "The supported scale types for continuous encoding channels.\n\nFor quantitative data, one of:\n\n- *linear* (default) - linear transform (translate and scale)\n- *pow* - power (exponential) transform\n- *sqrt* - square-root transform; *pow* with *exponent* = 0.5\n- *log* - logarithmic transform\n- *symlog* - bi-symmetric logarithmic transform per Webber et al.\n\nFor temporal data, one of:\n\n- *utc* (default, recommended) - UTC time\n- *time* - local time\n\nOther scale types:\n\n- *identity* - do not transform values when encoding", + "enum": [ + "linear", + "pow", + "sqrt", + "log", + "symlog", + "utc", + "time", + "identity" + ], + "type": "string" + }, + "Contour": { + "additionalProperties": false, + "description": "The contour mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "contour", + "description": "A contour mark that draws isolines to delineate regions above and below a particular continuous value. It is often used to convey densities as a height field. The special column name \"density\" can be used to map density values to the fill or stroke options.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "thresholds": { + "anyOf": [ + { + "type": "number" + }, + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of contour thresholds to subdivide the domain into discrete level sets; defaults to 10. One of:\n\n- a count representing the desired number of bins\n- an array of *n* threshold values for *n* - 1 bins" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Count": { + "additionalProperties": false, + "properties": { + "count": { + "anyOf": [ + { + "anyOf": [ + { + "type": "null" + }, + { + "maxItems": 0, + "minItems": 0, + "type": "array" + } + ], + "description": "A zero argument transform signature." + }, + { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "A single argument transform signature." + } + ], + "description": "Compute the count of records in an aggregation group." + }, + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "count" + ], + "type": "object" + }, + "CumeDist": { + "additionalProperties": false, + "properties": { + "cume_dist": { + "anyOf": [ + { + "type": "null" + }, + { + "maxItems": 0, + "minItems": 0, + "type": "array" + } + ], + "description": "Compute the cumulative distribution value over an ordered window partition. Equals the number of partition rows preceding or peer with the current row, divided by the total number of partition rows." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "cume_dist" + ], + "type": "object" + }, + "Curve": { + "$ref": "#/definitions/CurveName", + "description": "How to interpolate between control points." + }, + "CurveName": { + "description": "The built-in curve implementations.", + "enum": [ + "basis", + "basis-closed", + "basis-open", + "bundle", + "bump-x", + "bump-y", + "cardinal", + "cardinal-closed", + "cardinal-open", + "catmull-rom", + "catmull-rom-closed", + "catmull-rom-open", + "linear", + "linear-closed", + "monotone-x", + "monotone-y", + "natural", + "step", + "step-after", + "step-before" + ], + "type": "string" + }, + "Data": { + "additionalProperties": { + "$ref": "#/definitions/DataDefinition" + }, + "description": "Top-level dataset definitions.", + "type": "object" + }, + "DataArray": { + "description": "An inline array of data objects to treat as JSON data.", + "items": { + "type": "object" + }, + "type": "array" + }, + "DataCSV": { + "additionalProperties": false, + "description": "A data definition that loads a csv file.", + "properties": { + "delimiter": { + "description": "The column delimiter string. If not specified, DuckDB will try to infer the delimiter automatically.", + "type": "string" + }, + "file": { + "description": "The file path for the dataset to load.", + "type": "string" + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "sample_size": { + "description": "The sample size, in table rows, to consult for type inference. Set to `-1` to process all rows in the dataset.", + "type": "number" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "type": { + "const": "csv", + "description": "The data source type. One of:\n- `\"table\"`: Define a new table based on a SQL query.\n- `\"csv\"`: Load a comma-separated values (CSV) file.\n- `\"json\"`: Load JavaScript Object Notation (json) data.\n- `\"parquet\"`: Load a Parquet file.\n- `\"spatial\"`: Load a spatial data file format via `ST_Read`.", + "type": "string" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "type", + "file" + ], + "type": "object" + }, + "DataDefinition": { + "anyOf": [ + { + "$ref": "#/definitions/DataQuery" + }, + { + "$ref": "#/definitions/DataArray" + }, + { + "$ref": "#/definitions/DataFile" + }, + { + "$ref": "#/definitions/DataTable" + }, + { + "$ref": "#/definitions/DataParquet" + }, + { + "$ref": "#/definitions/DataCSV" + }, + { + "$ref": "#/definitions/DataSpatial" + }, + { + "$ref": "#/definitions/DataJSON" + }, + { + "$ref": "#/definitions/DataJSONObjects" + } + ] + }, + "DataFile": { + "additionalProperties": false, + "description": "A data definition that loads an external data file.", + "properties": { + "file": { + "description": "The data file to load. If no type option is provided, the file suffix must be one of `.csv`, `.json`, or `.parquet`.", + "type": [ + "string" + ] + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "file" + ], + "type": "object" + }, + "DataJSON": { + "additionalProperties": false, + "properties": { + "file": { + "description": "The file path for the dataset to load.", + "type": "string" + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "type": { + "const": "json", + "description": "The data source type. One of:\n- `\"table\"`: Define a new table based on a SQL query.\n- `\"csv\"`: Load a comma-separated values (CSV) file.\n- `\"json\"`: Load JavaScript Object Notation (json) data.\n- `\"parquet\"`: Load a Parquet file.\n- `\"spatial\"`: Load a spatial data file format via `ST_Read`.", + "type": "string" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "type", + "file" + ], + "type": "object" + }, + "DataJSONObjects": { + "additionalProperties": false, + "properties": { + "data": { + "description": "An array of inline objects in JSON-style format.", + "items": { + "type": "object" + }, + "type": "array" + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "type": { + "const": "json", + "description": "The data source type. One of:\n- `\"table\"`: Define a new table based on a SQL query.\n- `\"csv\"`: Load a comma-separated values (CSV) file.\n- `\"json\"`: Load JavaScript Object Notation (json) data.\n- `\"parquet\"`: Load a Parquet file.\n- `\"spatial\"`: Load a spatial data file format via `ST_Read`.", + "type": "string" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "data" + ], + "type": "object" + }, + "DataParquet": { + "additionalProperties": false, + "description": "A data definition that loads a parquet file.", + "properties": { + "file": { + "description": "The file path for the dataset to load.", + "type": "string" + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "type": { + "const": "parquet", + "description": "The data source type. One of:\n- `\"table\"`: Define a new table based on a SQL query.\n- `\"csv\"`: Load a comma-separated values (CSV) file.\n- `\"json\"`: Load JavaScript Object Notation (json) data.\n- `\"parquet\"`: Load a Parquet file.\n- `\"spatial\"`: Load a spatial data file format via `ST_Read`.", + "type": "string" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "type", + "file" + ], + "type": "object" + }, + "DataQuery": { + "description": "A SQL query defining a new temporary database table.", + "type": "string" + }, + "DataSpatial": { + "additionalProperties": false, + "description": "A data definition that loads a supported spatial data file format.", + "properties": { + "file": { + "description": "The file path for the spatial dataset to load. See the [DuckDB spatial documention][1] for more information on supported file types.\n\n[1]: https://duckdb.org/docs/extensions/spatial.html#st_read--read-spatial-data-from-files", + "type": "string" + }, + "layer": { + "description": "The named layer to load from the file. For example, in a TopoJSON file the layer is the named object to extract. For Excel spreadsheet files, the layer is the name of the worksheet to extract.", + "type": "string" + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "type": { + "const": "spatial", + "description": "The data source type. One of:\n- `\"table\"`: Define a new table based on a SQL query.\n- `\"csv\"`: Load a comma-separated values (CSV) file.\n- `\"json\"`: Load JavaScript Object Notation (json) data.\n- `\"parquet\"`: Load a Parquet file.\n- `\"spatial\"`: Load a spatial data file format via `ST_Read`.", + "type": "string" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "type", + "file" + ], + "type": "object" + }, + "DataTable": { + "additionalProperties": false, + "description": "A data definition that queries an existing table.", + "properties": { + "query": { + "description": "A SQL query string for the desired table data.", + "type": "string" + }, + "replace": { + "description": "Flag (default `true`) to replace an existing table of the same name. If `false`, creating a new table with an existing name raises an error.", + "type": "boolean" + }, + "select": { + "description": "A list of column names to extract upon load. Any other columns are omitted.", + "items": { + "type": "string" + }, + "type": "array" + }, + "temp": { + "description": "Flag (default `true`) to generate a temporary view or table.", + "type": "boolean" + }, + "type": { + "const": "table", + "description": "The data source type. One of:\n- `\"table\"`: Define a new table based on a SQL query.\n- `\"csv\"`: Load a comma-separated values (CSV) file.\n- `\"json\"`: Load JavaScript Object Notation (json) data.\n- `\"parquet\"`: Load a Parquet file.\n- `\"spatial\"`: Load a spatial data file format via `ST_Read`.", + "type": "string" + }, + "view": { + "description": "Flag (default `false`) to generate a view instead of a table.", + "type": "boolean" + }, + "where": { + "anyOf": [ + { + "type": "string" + }, + { + "items": { + "type": "string" + }, + "type": "array" + } + ], + "description": "A filter (WHERE clause) to apply upon load. Only rows that pass the filted are included." + } + }, + "required": [ + "type", + "query" + ], + "type": "object" + }, + "DateDay": { + "additionalProperties": false, + "properties": { + "dateDay": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Transform a Date value to a day of the month for cyclic comparison. Year and month values are collapsed to enable comparison over days only." + } + }, + "required": [ + "dateDay" + ], + "type": "object" + }, + "DateMonth": { + "additionalProperties": false, + "properties": { + "dateMonth": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Transform a Date value to a month boundary for cyclic comparison. Year values are collapsed to enable comparison over months only." + } + }, + "required": [ + "dateMonth" + ], + "type": "object" + }, + "DateMonthDay": { + "additionalProperties": false, + "properties": { + "dateMonthDay": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Transform a Date value to a month and day boundary for cyclic comparison. Year values are collapsed to enable comparison over months and days only." + } + }, + "required": [ + "dateMonthDay" + ], + "type": "object" + }, + "DelaunayLink": { + "additionalProperties": false, + "description": "The delaunayLink mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "delaunayLink", + "description": "A mark that draws links for each edge of the Delaunay triangulation of points given by the **x** and **y** channels. Like the link mark, except that **x1**, **y1**, **x2**, and **y2** are derived automatically from **x** and **y**. When an aesthetic channel is specified (such as\n**stroke** or **strokeWidth**), the link inherits the corresponding channel value from one of its two endpoints arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Delaunay triangulation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "DelaunayMesh": { + "additionalProperties": false, + "description": "The delaunayMesh mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "delaunayMesh", + "description": "A mark that draws a mesh of the Delaunay triangulation of the points given by the **x** and **y** channels. The **stroke** option defaults to _currentColor_, and the **strokeOpacity** defaults to 0.2; the **fill** option is not supported. When an aesthetic channel is specified (such as\n**stroke** or **strokeWidth**), the mesh inherits the corresponding channel value from one of its constituent points arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Delaunay triangulation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "DenseLine": { + "additionalProperties": false, + "description": "The denseLine mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "denseLine", + "description": "A denseLine mark that plots line densities rather than point densities. The mark forms a binned raster grid and \"draws\" straight lines into it. To avoid over-weighting steep lines, by default each drawn series is normalized on a per-column basis to approximate arc length normalization. The values for each series are aggregated to form the line density, which is then drawn as an image similar to the raster mark.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Flag to perform approximate arc length normalization of line segments to prevent artifacts due to overcounting steep lines. Defaults to `true`." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "A ordinal channel for grouping data into series to be drawn as separate lines." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "DenseRank": { + "additionalProperties": false, + "properties": { + "dense_rank": { + "anyOf": [ + { + "type": "null" + }, + { + "maxItems": 0, + "minItems": 0, + "type": "array" + } + ], + "description": "Compute the dense row rank (no gaps) over an ordered window partition. Sorting ties do not result in gaps in the rank numbers ( [1, 1, 2, ...])." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "dense_rank" + ], + "type": "object" + }, + "Density": { + "additionalProperties": false, + "description": "The density mark for 2D densities.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "density", + "description": "A 2D density mark that shows smoothed point cloud densities along two dimensions. The mark bins the data, counts the number of records that fall into each bin, and smooths the resulting counts, then plots the smoothed distribution, by default using a circular dot mark. The density mark calculates density values that can be mapped to encoding channels such as fill or r using the special field name \"density\".\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "anyOf": [ + { + "const": "dot", + "type": "string" + }, + { + "const": "circle", + "type": "string" + }, + { + "const": "hexagon", + "type": "string" + }, + { + "const": "cell", + "type": "string" + }, + { + "const": "text", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The basic mark type to use to render 2D density values. Defaults to a dot mark; cell and text marks are also supported." + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "DensityX": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stack": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Flag indicating if densities should be stacked. Defaults to false." + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "areaX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "lineX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "dotX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "textX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + } + ], + "description": "The densityX mark." + }, + "DensityY": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stack": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Flag indicating if densities should be stacked. Defaults to false." + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "areaY", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "lineY", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "enum": [ + "dot", + "dotY", + "circle", + "hexagon" + ], + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "enum": [ + "text", + "textY" + ], + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + } + ], + "description": "The densityY mark." + }, + "DiscreteScaleType": { + "description": "The supported scale types for discrete encoding channels. One of:\n\n- *ordinal* - from discrete inputs to discrete outputs\n- *identity* - do not transform values when encoding", + "enum": [ + "ordinal", + "identity" + ], + "type": "string" + }, + "Dot": { + "additionalProperties": false, + "description": "The dot mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "dot", + "description": "A dot mark that draws circles, or other symbols, as in a scatterplot.\n\nIf either **x** or **y** is not specified, the default is determined by the\n**frameAnchor** option. If none of **x**, **y**, and **frameAnchor** are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*,\n*y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n\nDots are sorted by descending radius **r** by default to mitigate overplotting; set the **sort** option to null to draw them in input order.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "DotX": { + "additionalProperties": false, + "description": "The dotX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "An interval (such as *day* or a number), to transform **y** values to the middle of the interval." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "dotX", + "description": "Like dot, except that **x** defaults to the identity function, assuming that\n*data* = [*x₀*, *x₁*, *x₂*, …].\n\nIf an **interval** is specified, such as *day*, **y** is transformed to the middle of the interval.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position of the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "DotY": { + "additionalProperties": false, + "description": "The dotY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "An interval (such as *day* or a number), to transform **x** values to the middle of the interval." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "dotY", + "description": "Like dot, except that **y** defaults to the identity function, assuming that\n*data* = [*y₀*, *y₁*, *y₂*, …].\n\nIf an **interval** is specified, such as *day*, **x** is transformed to the middle of the interval.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position of the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "ErrorBarX": { + "additionalProperties": false, + "description": "The errorbarX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "ci": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The confidence interval in (0, 1); defaults to 0.95." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "errorbarX", + "description": "A mark that draws error bars for a calculated parametric confidence interval for a dependent variable (*x*), potentially grouped by an independent variable (*y*).\n\nThis mark aggregates raw values to produce a [parametric confidence interval][1] of the mean, assuming a normal distribution. To instead visualize pre-computeted interval values or custom aggregations, use a **ruleY** mark with specified **x1** and **x2** channels.\n\nMultiple error bars can be produced by specifying a **z** or **stroke** channel. Set the **marker** option to `'tick'` to add small perpendicular lines at the start and end of the error interval.\n\n[1]: https://en.wikipedia.org/wiki/Normal_distribution#Confidence_intervals", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The dependent variable horizontal position channel, typically bound to the\n*x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The independent variable vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data, producing an independent error bar for each group. If not specified, it defaults to **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "x" + ], + "type": "object" + }, + "ErrorBarY": { + "additionalProperties": false, + "description": "The errorbarY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "ci": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The confidence interval in (0, 1); defaults to 0.95." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "errorbarY", + "description": "A mark that draws error bars for a calculated parametric confidence interval for a dependent variable (*y*), potentially grouped by an independent variable (*x*).\n\nThis mark aggregates raw values to produce a [parametric confidence interval][1] of the mean, assuming a normal distribution. To instead visualize pre-computeted interval values or custom aggregations, use a **ruleX** mark with specified **y1** and **y2** channels.\n\nMultiple error bars can be produced by specifying a **z** or **stroke** channel. Set the **marker** option to `'tick'` to add small perpendicular lines at the start and end of the error interval.\n\n[1]: https://en.wikipedia.org/wiki/Normal_distribution#Confidence_intervals", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The independent variable horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The dependent variable vertical position channel, typically bound to the\n*y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data, producing an independent error bar for each group. If not specified, it defaults to **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "y" + ], + "type": "object" + }, + "First": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "first": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Return the first column value found in an aggregation group." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "first" + ], + "type": "object" + }, + "FirstValue": { + "additionalProperties": false, + "properties": { + "first_value": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Get the first value of the given column in the current window frame." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "first_value" + ], + "type": "object" + }, + "Fixed": { + "const": "Fixed", + "description": "A symbol indicating a fixed scale domain. A fixed domain is initially determined from data as usual, but subsequently \"fixed\" so that it does not change over subsequent interactive filtering, ensring stable comparisons.", + "type": "string" + }, + "Frame": { + "additionalProperties": false, + "description": "The frame mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If null (default), the rectangular outline of the frame is drawn; otherwise the frame is drawn as a line only on the given side, and the\n**rx**, **ry**, **fill**, and **fillOpacity** options are ignored." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "frame", + "description": "Draws a rectangle around the plot’s frame, or if an **anchor** is given, a line on the given side. Useful for visual separation of facets, or in conjunction with axes and grids to fill the frame’s background.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "FrameAnchor": { + "description": "How to anchor a mark relative to the plot’s frame; one of:\n\n- *middle* - centered in the middle\n- in the middle of one of the edges: *top*, *right*, *bottom*, *left*\n- in one of the corners: *top-left*, *top-right*, *bottom-right*, *bottom-left*", + "enum": [ + "middle", + "top-left", + "top", + "top-right", + "right", + "bottom-right", + "bottom", + "bottom-left", + "left" + ], + "type": "string" + }, + "Geo": { + "additionalProperties": false, + "description": "The geo mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "geometry": { + "$ref": "#/definitions/ChannelValue", + "description": "A required channel for the geometry to render; defaults to identity, assuming *data* is a GeoJSON object or an iterable of GeoJSON objects." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "geo", + "description": "A geo mark. The **geometry** channel, which defaults to the identity function assuming that *data* is a GeoJSON object or an iterable of GeoJSON objects, is projected to the plane using the plot’s top-level\n**projection**.\n\nIf *data* is a GeoJSON feature collection, then the mark’s data is\n*data*.features; if *data* is a GeoJSON geometry collection, then the mark’s data is *data*.geometries; if *data* is some other GeoJSON object, then the mark’s data is the single-element array [*data*].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of Point and MultiPoint geometries, defaulting to a constant 3 pixels. If **r** is a number, it is interpreted as a constant radius in pixels; otherwise it is interpreted as a channel and the effective radius is controlled by the *r* scale, which defaults to a *sqrt* scale such that the visual area of a point is proportional to its associated value.\n\nIf **r** is a channel, geometries will be sorted by descending radius by default, to limit occlusion; use the **sort** transform to control render order. Geometries with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "GeoJSON": { + "additionalProperties": false, + "properties": { + "geojson": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute a GeoJSON-formatted string from geometry-typed data. This transform requires the DuckDB `spatial` extension." + } + }, + "required": [ + "geojson" + ], + "type": "object" + }, + "Graticule": { + "additionalProperties": false, + "description": "The graticule mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "graticule", + "description": "A geo mark whose *data* is a 10° global graticule. (For use with a spherical **projection** only.)", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "GridFx": { + "additionalProperties": false, + "description": "The gridFx mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridFx", + "description": "A horizontally-positioned ruleX mark (a vertical line, |) that renders a grid for the *fx* scale. The data defaults to the *fx* scale’s domain; if desired, use the **ticks** option.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "GridFy": { + "additionalProperties": false, + "description": "The gridFy mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridFy", + "description": "A vertically-positioned ruleY mark (a horizontal line, —) that renders a grid for the *fy* scale. The data defaults to the *fy* scale’s domain; if desired, use the **ticks** option.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary horizontal position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often left) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often right) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the tick; an optional channel bound to the *y* scale. If not specified, the rule will be vertically centered in the plot’s frame." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "GridInterpolate": { + "description": "A spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample", + "enum": [ + "none", + "linear", + "nearest", + "barycentric", + "random-walk" + ], + "type": "string" + }, + "GridX": { + "additionalProperties": false, + "description": "The gridX mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridX", + "description": "A horizontally-positioned ruleX mark (a vertical line, |) that renders a grid for the *x* scale. The data defaults to tick values sampled from the\n*x* scale’s domain; if desired, use one of the **ticks**, **tickSpacing**, or **interval** options.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "GridY": { + "additionalProperties": false, + "description": "The gridY mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridY", + "description": "A vertically-positioned ruleY mark (a horizontal line, —) that renders a grid for the *y* scale. The data defaults to tick values sampled from the\n*y* scale’s domain; if desired, use one of the **ticks**, **tickSpacing**, or **interval** options.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary horizontal position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often left) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often right) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the tick; an optional channel bound to the *y* scale. If not specified, the rule will be vertically centered in the plot’s frame." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "HConcat": { + "additionalProperties": false, + "description": "An hconcat component.", + "properties": { + "hconcat": { + "description": "Horizontally concatenate components in a row layout.", + "items": { + "$ref": "#/definitions/Component" + }, + "type": "array" + } + }, + "required": [ + "hconcat" + ], + "type": "object" + }, + "HSpace": { + "additionalProperties": false, + "description": "An hspace component.", + "properties": { + "hspace": { + "description": "Horizontal space to place between components. Number values indicate screen pixels. String values may use CSS units (em, pt, px, etc).", + "type": [ + "number", + "string" + ] + } + }, + "required": [ + "hspace" + ], + "type": "object" + }, + "Heatmap": { + "additionalProperties": false, + "description": "The heatmap mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "heatmap", + "description": "Like raster, but with default options for accurate density estimation via smoothing. The *bandwidth* (20), *interpolate* (\"linear\"), and\n*pixelSize* (2) options are set to produce smoothed density heatmaps.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Hexagon": { + "additionalProperties": false, + "description": "The hexagon mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hexagon", + "description": "Like dot, except that the **symbol** option is set to *hexagon*.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Hexbin": { + "additionalProperties": false, + "description": "The hexbin mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "binWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between centers of neighboring hexagons, in pixels; defaults to 20. If also using a hexgrid mark, use matching **binWidth** values." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hexbin", + "description": "A hexbin mark that bins **x** and **y** data into a hexagonal grid and visualizes aggregate functions per bin (e.g., count for binned density). Aggregate functions can be used for fill, stroke, or r (radius) options.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "anyOf": [ + { + "const": "dot", + "type": "string" + }, + { + "const": "circle", + "type": "string" + }, + { + "const": "hexagon", + "type": "string" + }, + { + "const": "text", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The basic mark type to use for hex-binned values. Defaults to a hexagon mark; dot and text marks are also supported." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "How to subdivide bins. If not specified, defaults to the *fill* channel, if any, or the *stroke* channel, if any. If null, bins will not be subdivided." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Hexgrid": { + "additionalProperties": false, + "description": "The hexgrid mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "binWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between centers of neighboring hexagons, in pixels; defaults to 20. Should match the **binWidth** of the hexbin mark." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hexgrid", + "description": "The hexgrid decoration mark complements the hexbin mark, showing the outlines of all hexagons spanning the frame with a default **stroke** of\n*currentColor* and a default **strokeOpacity** of 0.1, similar to the default axis grids.\n\nNote that the **binWidth** option of the hexgrid mark should match that of the hexbin transform. The grid is clipped by the frame. This is a stroke-only mark, and **fill** is not supported; to fill the frame, use the frame mark.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "Highlight": { + "additionalProperties": false, + "description": "A highlight interactor.", + "properties": { + "by": { + "$ref": "#/definitions/ParamRef", + "description": "The input selection. Unselected marks are deemphasized." + }, + "fill": { + "description": "The fill color of deemphasized marks. By default the fill is unchanged.", + "type": "string" + }, + "fillOpacity": { + "description": "The fill opacity of deemphasized marks. By default the fill opacity is unchanged.", + "type": "number" + }, + "opacity": { + "description": "The overall opacity of deemphasized marks. By default the opacity is set to 0.2.", + "type": "number" + }, + "select": { + "const": "highlight", + "description": "Highlight selected marks by deemphasizing the others.", + "type": "string" + }, + "stroke": { + "description": "The stroke color of deemphasized marks. By default the stroke is unchanged.", + "type": "string" + }, + "strokeOpacity": { + "description": "The stroke opacity of deemphasized marks. By default the stroke opacity is unchanged.", + "type": "number" + } + }, + "required": [ + "select", + "by" + ], + "type": "object" + }, + "Hull": { + "additionalProperties": false, + "description": "The hull mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hull", + "description": "A mark that draws a convex hull around the points given by the **x** and\n**y** channels. The **stroke** option defaults to _currentColor_ and the\n**fill** option defaults to _none_. When an aesthetic channel is specified (such as **stroke** or **strokeWidth**), the hull inherits the corresponding channel value from one of its constituent points arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate hull for each group. If **z** is not specified, it defaults to the **fill** channel, if any, or the **stroke** channel, if any.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Image": { + "additionalProperties": false, + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "crossOrigin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [cross-origin][1] behavior. See the [Plot.image notebook][2] for details.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/crossorigin [2]: https://observablehq.com/@observablehq/plot-image" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image height in pixels. When a number, it is interpreted as a constant radius in pixels; otherwise it is interpreted as a channel. Also sets the default **height**; if neither are set, defaults to 16. Images with a nonpositive height are not drawn." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "image", + "description": "An image mark that draws images as in a scatterplot.\n\nIf either **x** or **y** is not specified, the default is determined by the **frameAnchor** option. If none of **x**, **y**, and **frameAnchor** are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "preserveAspectRatio": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image [aspect ratio][1]; defaults to *xMidYMid meet*. To crop the image instead of scaling it to fit, use *xMidYMid slice*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image clip radius, for circular images. If null (default), images are not clipped; when a number, it is interpreted as a constant in pixels; otherwise it is interpreted as a channel, typically bound to the *r* scale. Also defaults **height** and **width** to twice its value." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle, in degrees clockwise. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "src": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The required image URL (or relative path). If a string that starts with a dot, slash, or URL protocol (*e.g.*, “https:”) it is assumed to be a constant; otherwise it is interpreted as a channel." + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image width in pixels. When a number, it is interpreted as a constant radius in pixels; otherwise it is interpreted as a channel. Also sets the default **height**; if neither are set, defaults to 16. Images with a nonpositive width are not drawn." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the image’s center; typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the image’s center; typically bound to the *y* scale." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Interpolate": { + "description": "How to interpolate range (output) values for continuous scales; one of:\n\n- *number* - linear numeric interpolation\n- *rgb* - red, green, blue (sRGB)\n- *hsl* - hue, saturation, lightness (HSL; cylindrical sRGB)\n- *hcl* - hue, chroma, perceptual lightness (CIELCh_ab; cylindrical CIELAB)\n- *lab* - perceptual lightness and opponent colors (L\\*a\\*b\\*, CIELAB)", + "enum": [ + "number", + "rgb", + "hsl", + "hcl", + "lab" + ], + "type": "string" + }, + "Interval": { + "$ref": "#/definitions/LiteralTimeInterval", + "description": "How to partition a continuous range into discrete intervals; one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*" + }, + "IntervalX": { + "additionalProperties": false, + "description": "An intervalX interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `field BETWEEN lo AND hi` is added for the currently selected interval [lo, hi]." + }, + "brush": { + "$ref": "#/definitions/BrushStyles", + "description": "CSS styles for the brush (SVG `rect`) element." + }, + "field": { + "description": "The name of the field (database column) over which the interval selection should be defined. If unspecified, the channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "pixelSize": { + "description": "The size of an interative pixel (default `1`). Larger pixel sizes reduce the brush resolution, which can reduce the size of pre-aggregated materialized views.", + "type": "number" + }, + "select": { + "const": "intervalX", + "description": "Select a continuous 1D interval selection over the `x` scale domain.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "IntervalXY": { + "additionalProperties": false, + "description": "An intervalXY interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `(xfield BETWEEN x1 AND x2) AND (yfield BETWEEN y1 AND y2)` is added for the currently selected intervals." + }, + "brush": { + "$ref": "#/definitions/BrushStyles", + "description": "CSS styles for the brush (SVG `rect`) element." + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "pixelSize": { + "description": "The size of an interative pixel (default `1`). Larger pixel sizes reduce the brush resolution, which can reduce the size of pre-aggregated materialized views.", + "type": "number" + }, + "select": { + "const": "intervalXY", + "description": "Select a continuous 2D interval selection over the `x` and `y` scale domains.", + "type": "string" + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the interval selection should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the interval selection should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "IntervalY": { + "additionalProperties": false, + "description": "An intervalY interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `field BETWEEN lo AND hi` is added for the currently selected interval [lo, hi]." + }, + "brush": { + "$ref": "#/definitions/BrushStyles", + "description": "CSS styles for the brush (SVG `rect`) element." + }, + "field": { + "description": "The name of the field (database column) over which the interval selection should be defined. If unspecified, the channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "pixelSize": { + "description": "The size of an interative pixel (default `1`). Larger pixel sizes reduce the brush resolution, which can reduce the size of pre-aggregated materialized views.", + "type": "number" + }, + "select": { + "const": "intervalY", + "description": "Select a continuous 1D interval selection over the `y` scale domain.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "LabelArrow": { + "enum": [ + "auto", + "up", + "right", + "down", + "left", + "none", + true, + false, + null + ], + "type": [ + "string", + "boolean", + "null" + ] + }, + "Lag": { + "additionalProperties": false, + "properties": { + "lag": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 3, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute lagging values in a column. Returns the value at the row that is `offset` (second argument, default `1`) rows before the current row within the window frame. If there is no such row, instead return `default` (third argument, default `null`). Both offset and default are evaluated with respect to the current row." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "lag" + ], + "type": "object" + }, + "Last": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "last": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Return the last column value found in an aggregation group." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "last" + ], + "type": "object" + }, + "LastValue": { + "additionalProperties": false, + "properties": { + "last_value": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Get the last value of the given column in the current window frame." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "last_value" + ], + "type": "object" + }, + "Lead": { + "additionalProperties": false, + "properties": { + "lag": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 3, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute leading values in a column. Returns the value at the row that is `offset` (second argument, default `1`) rows after the current row within the window frame. If there is no such row, instead return `default` (third argument, default `null`). Both offset and default are evaluated with respect to the current row." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "lag" + ], + "type": "object" + }, + "Legend": { + "additionalProperties": false, + "description": "A legend defined as a top-level spec component.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. If specified, the legend is interactive, using a `toggle` interaction for discrete legends or an `intervalX` interaction for continuous legends." + }, + "columns": { + "description": "The number of columns to use to layout a discrete legend.", + "type": "number" + }, + "field": { + "description": "The data field over which to generate output selection clauses. If unspecified, a matching field is retrieved from existing plot marks.", + "type": "string" + }, + "for": { + "description": "The name of the plot this legend applies to. A plot must include a `name` attribute to be referenced.", + "type": "string" + }, + "height": { + "description": "The height of a continuous legend, in pixels.", + "type": "number" + }, + "label": { + "description": "The legend label.", + "type": "string" + }, + "legend": { + "description": "A legend of the given type. The valid types are `\"color\"`, `\"opacity\"`, and `\"symbol\"`.", + "enum": [ + "color", + "opacity", + "symbol" + ], + "type": "string" + }, + "marginBottom": { + "description": "The bottom margin of the legend component, in pixels.", + "type": "number" + }, + "marginLeft": { + "description": "The left margin of the legend component, in pixels.", + "type": "number" + }, + "marginRight": { + "description": "The right margin of the legend component, in pixels.", + "type": "number" + }, + "marginTop": { + "description": "The top margin of the legend component, in pixels.", + "type": "number" + }, + "tickSize": { + "description": "The size of legend ticks in a continuous legend, in pixels.", + "type": "number" + }, + "width": { + "description": "The width of a continuous legend, in pixels.", + "type": "number" + } + }, + "required": [ + "for", + "legend" + ], + "type": "object" + }, + "Line": { + "additionalProperties": false, + "description": "The line mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "line", + "description": "A line mark that connects control points.\n\nPoints along the line are connected in input order. If there are multiple series via the **z**, **fill**, or **stroke** channel, series are drawn in input order such that the last series is drawn on top. Typically *data* is already in sorted order, such as chronological for time series; if needed, consider a **sort** transform.\n\nIf any **x** or **y** values are invalid (undefined, null, or NaN), the line will be interrupted, resulting in a break that divides the line shape into multiple segments. If a line segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps. In addition, some curves such as *cardinal-open* only render a visible segment if it contains multiple points.\n\nVariable aesthetic channels are supported: if the **stroke** is defined as a channel, the line will be broken into contiguous overlapping segments when the stroke color changes; the stroke color will apply to the interval spanning the current data point and the following data point. This behavior also applies to the **fill**, **fillOpacity**, **strokeOpacity**,\n**strokeWidth**, **opacity**, **href**, **title**, and **ariaLabel** channels. When any of these channels are used, setting an explicit **z** channel (possibly to null) is strongly recommended.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "LineX": { + "additionalProperties": false, + "description": "The lineX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "lineX", + "description": "Like line, except that **x** defaults to the identity function assuming that *data* = [*x₀*, *x₁*, *x₂*, …] and **y** defaults to the zero-based index [0, 1, 2, …].", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "LineY": { + "additionalProperties": false, + "description": "The lineY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "lineY", + "description": "Like line, except **y** defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …] and **x** defaults to the zero-based index [0, 1, 2, …].", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Link": { + "additionalProperties": false, + "description": "The link mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points.\n\nSince a link has exactly two points, only the following curves (or a custom curve) are recommended: *linear*, *step*, *step-after*, *step-before*,\n*bump-x*, or *bump-y*. Note that the *linear* curve is incapable of showing a fill since a straight line has zero area. For a curved link, use an arrow mark with the **bend** option.\n\nIf the plot uses a spherical **projection**, the default *auto* **curve** will render links as geodesics; to draw a straight line instead, use the\n*linear* **curve**." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "link", + "description": "A link mark, drawing line segments (curves) connecting pairs of points.\n\nIf the plot uses a spherical **projection**, the default *auto* **curve** will render links as geodesics; to draw a straight line instead, use the\n*linear* **curve**.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position, for vertical links; typically bound to the *x* scale; shorthand for setting defaults for both **x1** and **x2**." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position; typically bound to the *x* scale; also sets a default for **x2**." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position; typically bound to the *x* scale; also sets a default for **x1**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position, for horizontal links; typically bound to the *y* scale; shorthand for setting defaults for both **y1** and **y2**." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position; typically bound to the *y* scale; also sets a default for **y2**." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position; typically bound to the *y* scale; also sets a default for **y1**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "LiteralTimeInterval": { + "anyOf": [ + { + "const": "3 months", + "type": "string" + }, + { + "const": "10 years", + "type": "string" + }, + { + "$ref": "#/definitions/TimeIntervalName" + }, + { + "const": "seconds", + "type": "string" + }, + { + "const": "minutes", + "type": "string" + }, + { + "const": "hours", + "type": "string" + }, + { + "const": "days", + "type": "string" + }, + { + "const": "weeks", + "type": "string" + }, + { + "const": "months", + "type": "string" + }, + { + "const": "quarters", + "type": "string" + }, + { + "const": "halfs", + "type": "string" + }, + { + "const": "years", + "type": "string" + }, + { + "const": "mondays", + "type": "string" + }, + { + "const": "tuesdays", + "type": "string" + }, + { + "const": "wednesdays", + "type": "string" + }, + { + "const": "thursdays", + "type": "string" + }, + { + "const": "fridays", + "type": "string" + }, + { + "const": "saturdays", + "type": "string" + }, + { + "const": "sundays", + "type": "string" + }, + { + "type": "string" + } + ] + }, + "MarkerName": { + "description": "The built-in marker implementations; one of:\n\n- *arrow* - an arrowhead with *auto* orientation\n- *arrow-reverse* - an arrowhead with *auto-start-reverse* orientation\n- *dot* - a filled *circle* with no stroke and 2.5px radius\n- *circle-fill* - a filled circle with a white stroke and 3px radius\n- *circle-stroke* - a stroked circle with a white fill and 3px radius\n- *circle* - alias for *circle-fill*\n- *tick* - a small opposing line\n- *tick-x* - a small horizontal line\n- *tick-y* - a small vertical line", + "enum": [ + "arrow", + "arrow-reverse", + "dot", + "circle", + "circle-fill", + "circle-stroke", + "tick", + "tick-x", + "tick-y" + ], + "type": "string" + }, + "Max": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "max": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the maximum value of the given column." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "max" + ], + "type": "object" + }, + "Median": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "median": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the median value of the given column." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "median" + ], + "type": "object" + }, + "Menu": { + "additionalProperties": false, + "description": "A menu input component.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for the currently selected menu option." + }, + "column": { + "description": "The name of a database column from which to pull menu options. The unique column values are used as menu options. Used in conjunction with the `from` property.", + "type": "string" + }, + "field": { + "description": "The database column name to use within generated selection clause predicates. Defaults to the `column` property.", + "type": "string" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "description": "The name of a database table to use as a data source for this widget. Used in conjunction with the `column` property.", + "type": "string" + }, + "input": { + "const": "menu", + "description": "A menu input widget.", + "type": "string" + }, + "label": { + "description": "A text label for this input.", + "type": "string" + }, + "options": { + "description": "An array of menu options, as literal values or option objects. Option objects have a `value` property and an optional `label` property. If no label is provided, the string-coerced value is used.", + "items": { + "anyOf": [ + {}, + { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": {} + }, + "required": [ + "value" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "value": { + "description": "The initial selected menu value." + } + }, + "required": [ + "input" + ], + "type": "object" + }, + "Meta": { + "description": "Specification metadata.", + "properties": { + "credit": { + "description": "Credits or other acknowledgements.", + "type": "string" + }, + "description": { + "description": "A description of the specification content.", + "type": "string" + }, + "title": { + "description": "The specification title.", + "type": "string" + } + }, + "type": "object" + }, + "Min": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "min": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the minimum value of the given column." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "min" + ], + "type": "object" + }, + "Mode": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "mode": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the mode value of the given column." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "mode" + ], + "type": "object" + }, + "NTile": { + "additionalProperties": false, + "properties": { + "ntile": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute an n-tile integer ranging from 1 to the provided argument (num_buckets), dividing the partition as equally as possible." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "ntile" + ], + "type": "object" + }, + "NearestX": { + "additionalProperties": false, + "description": "A nearestX interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `field = value` is added for the currently nearest value." + }, + "channels": { + "description": "The encoding channels whose domain values should be selected. For example, a setting of `['color']` selects the data value backing the color channel, whereas `['x', 'z']` selects both x and z channel domain values. If unspecified, the selected channels default to match the current pointer settings: a `nearestX` interactor selects the `['x']` channels, while a `nearest` interactor selects the `['x', 'y']` channels.", + "items": { + "type": "string" + }, + "type": "array" + }, + "fields": { + "description": "The fields (database column names) to use in generated selection clause predicates. If unspecified, the fields backing the selected *channels* in the first valid prior mark definition are used by default.", + "items": { + "type": "string" + }, + "type": "array" + }, + "maxRadius": { + "description": "The maximum radius of a nearest selection (default 40). Marks with (x, y) coordinates outside this radius will not be selected as nearest points.", + "type": "number" + }, + "select": { + "const": "nearestX", + "description": "Select values from the mark closest to the pointer *x* location.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "NearestY": { + "additionalProperties": false, + "description": "A nearestY interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `field = value` is added for the currently nearest value." + }, + "channels": { + "description": "The encoding channels whose domain values should be selected. For example, a setting of `['color']` selects the data value backing the color channel, whereas `['x', 'z']` selects both x and z channel domain values. If unspecified, the selected channels default to match the current pointer settings: a `nearestX` interactor selects the `['x']` channels, while a `nearest` interactor selects the `['x', 'y']` channels.", + "items": { + "type": "string" + }, + "type": "array" + }, + "fields": { + "description": "The fields (database column names) to use in generated selection clause predicates. If unspecified, the fields backing the selected *channels* in the first valid prior mark definition are used by default.", + "items": { + "type": "string" + }, + "type": "array" + }, + "maxRadius": { + "description": "The maximum radius of a nearest selection (default 40). Marks with (x, y) coordinates outside this radius will not be selected as nearest points.", + "type": "number" + }, + "select": { + "const": "nearestY", + "description": "Select values from the mark closest to the pointer *y* location.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "NthValue": { + "additionalProperties": false, + "properties": { + "nth_value": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 2, + "minItems": 1, + "type": "array" + } + ], + "description": "Get the nth value of the given column in the current window frame, counting from one. The second argument is the offset for the nth row." + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "nth_value" + ], + "type": "object" + }, + "Pan": { + "additionalProperties": false, + "description": "A pan interactor.", + "properties": { + "select": { + "const": "pan", + "description": "Pan a plot along both the `x` and `y` scales.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `x` domain. A clause of the form `field BETWEEN x1 AND x2` is added for the current pan/zom interval [x1, x2]." + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the pan/zoom interval should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `y` domain. A clause of the form `field BETWEEN y1 AND y2` is added for the current pan/zom interval [y1, y2]." + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the pan/zoom interval should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "PanX": { + "additionalProperties": false, + "description": "A panX interactor.", + "properties": { + "select": { + "const": "panX", + "description": "Pan a plot along the `x` scale only.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `x` domain. A clause of the form `field BETWEEN x1 AND x2` is added for the current pan/zom interval [x1, x2]." + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the pan/zoom interval should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `y` domain. A clause of the form `field BETWEEN y1 AND y2` is added for the current pan/zom interval [y1, y2]." + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the pan/zoom interval should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "PanY": { + "additionalProperties": false, + "description": "A panY interactor.", + "properties": { + "select": { + "const": "panY", + "description": "Pan a plot along the `y` scale only.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `x` domain. A clause of the form `field BETWEEN x1 AND x2` is added for the current pan/zom interval [x1, x2]." + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the pan/zoom interval should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `y` domain. A clause of the form `field BETWEEN y1 AND y2` is added for the current pan/zom interval [y1, y2]." + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the pan/zoom interval should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "PanZoom": { + "additionalProperties": false, + "description": "A panZoom interactor.", + "properties": { + "select": { + "const": "panZoom", + "description": "Pan and zoom a plot along both the `x` and `y` scales.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `x` domain. A clause of the form `field BETWEEN x1 AND x2` is added for the current pan/zom interval [x1, x2]." + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the pan/zoom interval should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `y` domain. A clause of the form `field BETWEEN y1 AND y2` is added for the current pan/zom interval [y1, y2]." + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the pan/zoom interval should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "PanZoomX": { + "additionalProperties": false, + "description": "A panZoomX interactor.", + "properties": { + "select": { + "const": "panZoomX", + "description": "Pan and zoom a plot along the `x` scale only.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `x` domain. A clause of the form `field BETWEEN x1 AND x2` is added for the current pan/zom interval [x1, x2]." + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the pan/zoom interval should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `y` domain. A clause of the form `field BETWEEN y1 AND y2` is added for the current pan/zom interval [y1, y2]." + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the pan/zoom interval should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "PanZoomY": { + "additionalProperties": false, + "description": "A panZoomY interactor.", + "properties": { + "select": { + "const": "panZoomY", + "description": "Pan and zoom a plot along the `y` scale only.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `x` domain. A clause of the form `field BETWEEN x1 AND x2` is added for the current pan/zom interval [x1, x2]." + }, + "xfield": { + "description": "The name of the field (database column) over which the `x`-component of the pan/zoom interval should be defined. If unspecified, the `x` channel field of the first valid prior mark definition is used.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection for the `y` domain. A clause of the form `field BETWEEN y1 AND y2` is added for the current pan/zom interval [y1, y2]." + }, + "yfield": { + "description": "The name of the field (database column) over which the `y`-component of the pan/zoom interval should be defined. If unspecified, the `y` channel field of the first valid prior mark definition is used.", + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "Param": { + "additionalProperties": false, + "description": "A Param definition.", + "properties": { + "select": { + "const": "value", + "description": "The type of reactive parameter. One of:\n- `\"value\"` (default) for a standard `Param`\n- `\"intersect\"` for a `Selection` that intersects clauses (logical \"and\")\n- `\"union\"` for a `Selection` that unions clauses (logical \"or\")\n- `\"single\"` for a `Selection` that retains a single clause only\n- `\"crossfilter\"` for a cross-filtered intersection `Selection`", + "type": "string" + }, + "value": { + "$ref": "#/definitions/ParamValue", + "description": "The initial parameter value." + } + }, + "required": [ + "value" + ], + "type": "object" + }, + "ParamDate": { + "additionalProperties": false, + "description": "A Date-valued Param definition.", + "properties": { + "date": { + "description": "The initial parameter value as an ISO date/time string to be parsed to a Date object.", + "type": "string" + }, + "select": { + "const": "value", + "description": "The type of reactive parameter. One of:\n- `\"value\"` (default) for a standard `Param`\n- `\"intersect\"` for a `Selection` that intersects clauses (logical \"and\")\n- `\"union\"` for a `Selection` that unions clauses (logical \"or\")\n- `\"single\"` for a `Selection` that retains a single clause only\n- `\"crossfilter\"` for a cross-filtered intersection `Selection`", + "type": "string" + } + }, + "required": [ + "date" + ], + "type": "object" + }, + "ParamDefinition": { + "anyOf": [ + { + "$ref": "#/definitions/ParamValue" + }, + { + "$ref": "#/definitions/Param" + }, + { + "$ref": "#/definitions/ParamDate" + }, + { + "$ref": "#/definitions/Selection" + } + ], + "description": "A Param or Selection definition." + }, + "ParamLiteral": { + "description": "Literal Param values.", + "type": [ + "null", + "string", + "number", + "boolean" + ] + }, + "ParamRef": { + "type": "string" + }, + "ParamValue": { + "anyOf": [ + { + "$ref": "#/definitions/ParamLiteral" + }, + { + "items": { + "anyOf": [ + { + "$ref": "#/definitions/ParamLiteral" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "type": "array" + } + ], + "description": "Valid Param values." + }, + "Params": { + "additionalProperties": { + "$ref": "#/definitions/ParamDefinition" + }, + "description": "Top-level Param and Selection definitions.", + "type": "object" + }, + "PercentRank": { + "additionalProperties": false, + "properties": { + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "percent_rank": { + "anyOf": [ + { + "type": "null" + }, + { + "maxItems": 0, + "minItems": 0, + "type": "array" + } + ], + "description": "Compute the percetange rank over an ordered window partition." + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "percent_rank" + ], + "type": "object" + }, + "Plot": { + "additionalProperties": false, + "description": "A plot component.", + "properties": { + "align": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "ariaDescription": { + "description": "The [aria-description attribute][1] on the SVG root.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description", + "type": [ + "string", + "null" + ] + }, + "ariaLabel": { + "description": "The [aria-label attribute][1] on the SVG root.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label", + "type": [ + "string", + "null" + ] + }, + "aspectRatio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired aspect ratio of the *x* and *y* scales, affecting the default height. Given an aspect ratio of *dx* / *dy*, and assuming that the *x* and\n*y* scales represent equivalent units (say, degrees Celsius or meters), computes a default height such that *dx* pixels along *x* represents the same variation as *dy* pixels along *y*. Note: when faceting, set the *fx* and *fy* scales’ **round** option to false for an exact aspect ratio." + }, + "axis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *x* or *fx*, or *left* or *right* for *y* or *fy*. The default depends on the scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *x* or *fx*, or *left* and *right* for *y* or\n*fy*). If null, the implicit axis is suppressed.\n\nFor position axes only." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The default clip for all marks." + }, + "colorBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* and *diverging-log* scales only." + }, + "colorClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "colorConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* and *diverging-symlog* scales only." + }, + "colorDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "colorExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* and *diverging-pow* scales only." + }, + "colorInterpolate": { + "anyOf": [ + { + "$ref": "#/definitions/Interpolate" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to interpolate color range values. For quantitative scales only. This attribute can be used to specify a color space for interpolating colors specified in the **colorRange**." + }, + "colorLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "colorN": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *quantile* scale, the number of quantiles (creates *n* - 1 thresholds); for a *quantize* scale, the approximate number of thresholds; defaults to 5." + }, + "colorNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "colorPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "colorPivot": { + "anyOf": [ + {}, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a diverging color scale, the input value (abstract value) that divides the domain into two parts; defaults to 0 for *diverging* scales, dividing the domain into negative and positive parts; defaults to 1 for\n*diverging-log* scales. By default, diverging scales are symmetric around the pivot; see the **symmetric** option." + }, + "colorRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**. For other ordinal data, it is an array (or iterable) of output values in the same order as the **domain**." + }, + "colorReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "colorScale": { + "anyOf": [ + { + "$ref": "#/definitions/ColorScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *color* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, *categorical* for color scales, and otherwise *ordinal*." + }, + "colorScheme": { + "anyOf": [ + { + "$ref": "#/definitions/ColorScheme" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If specified, shorthand for setting the **colorRange** or **colorInterpolate** option of a *color* scale." + }, + "colorSymmetric": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a diverging color scale, if true (the default), extend the domain to ensure that the lower part of the domain (below the **pivot**) is commensurate with the upper part of the domain (above the **pivot**).\n\nA symmetric diverging color scale may not use all of its output **range**; this reduces contrast but ensures that deviations both below and above the\n**pivot** are represented proportionally. Otherwise if false, the full output **range** will be used; this increases contrast but values on opposite sides of the **pivot** may not be meaningfully compared." + }, + "colorTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "colorZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "facetGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Default axis grid for fx and fy scales; typically set to true to enable." + }, + "facetLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Default axis label for fx and fy scales; typically set to null to disable." + }, + "facetMargin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four facet margins: marginTop, marginRight, marginBottom, and marginLeft." + }, + "facetMarginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The right facet margin; the (minimum) distance in pixels between the right edges of the inner and outer plot area." + }, + "facetMarginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bottom facet margin; the (minimum) distance in pixels between the bottom edges of the inner and outer plot area." + }, + "facetMarginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The left facet margin; the (minimum) distance in pixels between the left edges of the inner and outer plot area." + }, + "facetMarginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The top facet margin; the (minimum) distance in pixels between the top edges of the inner and outer plot area." + }, + "fxAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "fxAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "fxAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "fxAxis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *fx*. Defaults to *top* if there is a *bottom* *x* axis, and otherwise *bottom*.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *fx*). If null, the implicit axis is suppressed." + }, + "fxDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "fxFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "fxGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "fxInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "fxInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "fxInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "fxLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "fxLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "fxLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "fxLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "fxPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "fxPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "fxPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "fxRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and the plot’s dimensions. For ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "fxReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "fxRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "fxTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "fxTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **fxTickSize** and\n**fxTickRotate**." + }, + "fxTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "fxTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "fxTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "fxTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "fyAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "fyAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "fyAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "fyAxis": { + "anyOf": [ + { + "const": "left", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *left* or\n*right* for *fy*. Defaults to *left* for an *fy* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*left* and *right* for *fy*). If null, the implicit axis is suppressed." + }, + "fyDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "fyFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "fyGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "fyInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "fyInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "fyInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "fyLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "fyLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "fyLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "fyLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "fyPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "fyPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "fyPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "fyRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and the plot’s dimensions. For ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "fyReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "fyRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "fyTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "fyTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **fyTickSize** and\n**fyTickRotate**." + }, + "fyTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "fyTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "fyTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "fyTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "grid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The outer height of the plot in pixels, including margins. The default depends on the plot’s scales, and the plot’s width if an aspectRatio is specified. For example, if the *y* scale is linear and there is no *fy* scale, it might be 396." + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "lengthBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "lengthClamp": { + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "lengthConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "lengthDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero. Radius scales have a default domain from 0 to the median first quartile of associated channels. Length have a default domain from 0 to the median median of associated channels. Opacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "lengthExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "lengthNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "lengthPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "lengthRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nLength scales have a default range of [0, 12]." + }, + "lengthScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *length* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The length scale defaults to *linear*, as this scale is intended for quantitative data." + }, + "lengthZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**. Otherwise, the default margins depend on the maximum margins of the plot’s marks. While most marks default to zero margins (because they are drawn inside the chart area), Plot’s axis marks have non-zero default margins." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bottom margin; the distance in pixels between the bottom edges of the inner and outer plot area. Defaults to the maximum bottom margin of the plot’s marks." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The left margin; the distance in pixels between the left edges of the inner and outer plot area. Defaults to the maximum left margin of the plot’s marks." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The right margin; the distance in pixels between the right edges of the inner and outer plot area. Defaults to the maximum right margin of the plot’s marks." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The top margin; the distance in pixels between the top edges of the inner and outer plot area. Defaults to the maximum top margin of the plot’s marks." + }, + "margins": { + "additionalProperties": false, + "description": "A shorthand object notation for setting multiple margin values. The object keys are margin names (top, right, etc).", + "properties": { + "bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "left": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "right": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "top": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "name": { + "description": "A unique name for the plot. The name is used by standalone legend components to to lookup the plot and access scale mappings.", + "type": "string" + }, + "opacityBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "opacityClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "opacityConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "opacityDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nOpacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "opacityExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "opacityLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "opacityNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "opacityPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "opacityRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values).\n\nOpacity scales have a default range of [0, 1]." + }, + "opacityReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "opacityScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *opacity* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The opacity scale defaults to *linear*; this scales is intended for quantitative data." + }, + "opacityTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "opacityZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "padding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "plot": { + "description": "An array of plot marks, interactors, or legends. Marks are graphical elements that make up plot layers. Unless otherwise configured, interactors will use the nearest previous mark as a basis for which data fields to select.", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/PlotMark" + }, + { + "$ref": "#/definitions/PlotInteractor" + }, + { + "$ref": "#/definitions/PlotLegend" + } + ] + }, + "type": "array" + }, + "projectionClip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "const": "frame", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The projection’s clipping method; one of:\n\n- *frame* or true (default) - clip to the plot’s frame (including margins but not insets)\n- a number - clip to a circle of the given radius in degrees centered around the origin\n- null or false - do not clip\n\nSome projections (such as [*armadillo*][1] and [*berghaus*][2]) require spherical clipping: in that case set the marks’ **clip** option to\n*sphere*.\n\n[1]: https://observablehq.com/@d3/armadillo [2]: https://observablehq.com/@d3/berghaus-star" + }, + "projectionDomain": { + "anyOf": [ + { + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A GeoJSON object to fit to the plot’s frame (minus insets); defaults to a Sphere for spherical projections (outline of the the whole globe)." + }, + "projectionInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four projection insets. All insets typically default to zero, though not always. A positive inset reduces effective area, while a negative inset increases it." + }, + "projectionInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge of the projection by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "projectionInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge of the projection by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "projectionInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge of the projection by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "projectionInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge of the projection by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "projectionParallels": { + "anyOf": [ + { + "items": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y1" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y2" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [standard parallels][1]. For conic projections only.\n\n[1]: https://d3js.org/d3-geo/conic#conic_parallels" + }, + "projectionPrecision": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The projection’s [sampling threshold][1].\n\n[1]: https://d3js.org/d3-geo/projection#projection_precision" + }, + "projectionRotate": { + "anyOf": [ + { + "items": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "x" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "z" + } + ], + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A rotation of the sphere before projection; defaults to [0, 0, 0]. Specified as Euler angles λ (yaw, or reference longitude), φ (pitch, or reference latitude), and optionally γ (roll), in degrees." + }, + "projectionType": { + "anyOf": [ + { + "$ref": "#/definitions/ProjectionName" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired projection; one of:\n\n- a named built-in projection such as *albers-usa*\n- null, for no projection\n\nNamed projections are scaled and translated to fit the **domain** to the plot’s frame (minus insets)." + }, + "rBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "rClamp": { + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "rConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "rDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nRadius scales have a default domain from 0 to the median first quartile of associated channels." + }, + "rExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "rLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value." + }, + "rNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "rPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "rRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nRadius scales have a default range of [0, 3]." + }, + "rScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *r* (radius) scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The radius scale defaults to *sqrt*; this scale is intended for quantitative data." + }, + "rZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "style": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/CSSStyles" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Custom styles to override Plot’s defaults. Styles may be specified either as a string of inline styles (*e.g.*, `\"color: red;\"`, in the same fashion as assigning [*element*.style][1]) or an object of properties (*e.g.*, `{color: \"red\"}`, in the same fashion as assigning [*element*.style properties][2]). Note that unitless numbers ([quirky lengths][3]) such as `{padding: 20}` may not supported by some browsers; you should instead specify a string with units such as `{padding: \"20px\"}`. By default, the returned plot has a max-width of 100%, and the system-ui font. Plot’s marks and axes default to [currentColor][4], meaning that they will inherit the surrounding content’s color.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style [2]: https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration [3]: https://www.w3.org/TR/css-values-4/#deprecated-quirky-length [4]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentcolor_keyword" + }, + "symbolDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. As symbol scales are discrete, the domain is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "symbolRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nSymbol scales have a default range of categorical symbols; the choice of symbols depends on whether the associated dot mark is filled or stroked." + }, + "symbolScale": { + "anyOf": [ + { + "$ref": "#/definitions/DiscreteScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *symbol* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. Defaults to an *ordinal* scale type." + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The outer width of the plot in pixels, including margins. Defaults to 640. On Observable, this can be set to the built-in [width][1] for full-width responsive plots. Note: the default style has a max-width of 100%; the plot will automatically shrink to fit even when a fixed width is specified.\n\n[1]: https://github.com/observablehq/stdlib/blob/main/README.md#width" + }, + "xAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "xAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "xAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "xAxis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *x*. Defaults to *bottom* for an *x* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *x*). If null, the implicit axis is suppressed." + }, + "xBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "xClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "xConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "xDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero. Radius scales have a default domain from 0 to the median first quartile of associated channels. Length have a default domain from 0 to the median median of associated channels. Opacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "xExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "xFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "xGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "xInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "xInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "xInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "xLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "xLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "xLabelArrow": { + "anyOf": [ + { + "$ref": "#/definitions/LabelArrow" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the x-axis scale label. If *auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "xLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "xLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "xNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "xPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "xPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "xPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "xPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "xRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "xReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "xRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "xScale": { + "anyOf": [ + { + "$ref": "#/definitions/PositionScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *x* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, *categorical* for color scales, and otherwise *ordinal*. However, the radius scale defaults to *sqrt*, and the length and opacity scales default to *linear*; these scales are intended for quantitative data. The plot’s marks may also impose a scale type; for example, the barY mark requires that *x* is a *band* scale." + }, + "xTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "xTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "xTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "xTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "xTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "xTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "xZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "xyDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Set the *x* and *y* scale domains." + }, + "yAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "yAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "yAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "yAxis": { + "anyOf": [ + { + "const": "left", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *left* or\n*right* for *y*. Defaults to *left* for a *y* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*left* and *right* for *y*). If null, the implicit axis is suppressed." + }, + "yBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "yClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "yConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "yDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero." + }, + "yExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "yFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "yGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "yInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "yInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "yInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "yLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "yLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "yLabelArrow": { + "anyOf": [ + { + "$ref": "#/definitions/LabelArrow" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the x-axis scale label. If *auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "yLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "yLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "yNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "yPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "yPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "yPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "yPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "yRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*,\n*max*]; it can be [*max*, *min*] to reverse the scale." + }, + "yReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**. Note that by default, when the *y* scale is continuous, the *max* value points to the top of the screen, whereas ordinal values are ranked from top to bottom." + }, + "yRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "yScale": { + "anyOf": [ + { + "$ref": "#/definitions/PositionScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *y* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, The plot’s marks may also impose a scale type; for example, the barY mark requires that *x* is a *band* scale." + }, + "yTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "yTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **yTickSize** and\n**yTickRotate**." + }, + "yTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "yTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "yTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "yTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "yZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + } + }, + "required": [ + "plot" + ], + "type": "object" + }, + "PlotAttributes": { + "additionalProperties": false, + "description": "Plot attributes.", + "properties": { + "align": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "ariaDescription": { + "description": "The [aria-description attribute][1] on the SVG root.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description", + "type": [ + "string", + "null" + ] + }, + "ariaLabel": { + "description": "The [aria-label attribute][1] on the SVG root.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label", + "type": [ + "string", + "null" + ] + }, + "aspectRatio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired aspect ratio of the *x* and *y* scales, affecting the default height. Given an aspect ratio of *dx* / *dy*, and assuming that the *x* and\n*y* scales represent equivalent units (say, degrees Celsius or meters), computes a default height such that *dx* pixels along *x* represents the same variation as *dy* pixels along *y*. Note: when faceting, set the *fx* and *fy* scales’ **round** option to false for an exact aspect ratio." + }, + "axis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *x* or *fx*, or *left* or *right* for *y* or *fy*. The default depends on the scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *x* or *fx*, or *left* and *right* for *y* or\n*fy*). If null, the implicit axis is suppressed.\n\nFor position axes only." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The default clip for all marks." + }, + "colorBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* and *diverging-log* scales only." + }, + "colorClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "colorConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* and *diverging-symlog* scales only." + }, + "colorDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "colorExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* and *diverging-pow* scales only." + }, + "colorInterpolate": { + "anyOf": [ + { + "$ref": "#/definitions/Interpolate" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to interpolate color range values. For quantitative scales only. This attribute can be used to specify a color space for interpolating colors specified in the **colorRange**." + }, + "colorLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "colorN": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *quantile* scale, the number of quantiles (creates *n* - 1 thresholds); for a *quantize* scale, the approximate number of thresholds; defaults to 5." + }, + "colorNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "colorPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "colorPivot": { + "anyOf": [ + {}, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a diverging color scale, the input value (abstract value) that divides the domain into two parts; defaults to 0 for *diverging* scales, dividing the domain into negative and positive parts; defaults to 1 for\n*diverging-log* scales. By default, diverging scales are symmetric around the pivot; see the **symmetric** option." + }, + "colorRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**. For other ordinal data, it is an array (or iterable) of output values in the same order as the **domain**." + }, + "colorReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "colorScale": { + "anyOf": [ + { + "$ref": "#/definitions/ColorScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *color* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, *categorical* for color scales, and otherwise *ordinal*." + }, + "colorScheme": { + "anyOf": [ + { + "$ref": "#/definitions/ColorScheme" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If specified, shorthand for setting the **colorRange** or **colorInterpolate** option of a *color* scale." + }, + "colorSymmetric": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a diverging color scale, if true (the default), extend the domain to ensure that the lower part of the domain (below the **pivot**) is commensurate with the upper part of the domain (above the **pivot**).\n\nA symmetric diverging color scale may not use all of its output **range**; this reduces contrast but ensures that deviations both below and above the\n**pivot** are represented proportionally. Otherwise if false, the full output **range** will be used; this increases contrast but values on opposite sides of the **pivot** may not be meaningfully compared." + }, + "colorTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "colorZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "facetGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Default axis grid for fx and fy scales; typically set to true to enable." + }, + "facetLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Default axis label for fx and fy scales; typically set to null to disable." + }, + "facetMargin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four facet margins: marginTop, marginRight, marginBottom, and marginLeft." + }, + "facetMarginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The right facet margin; the (minimum) distance in pixels between the right edges of the inner and outer plot area." + }, + "facetMarginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bottom facet margin; the (minimum) distance in pixels between the bottom edges of the inner and outer plot area." + }, + "facetMarginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The left facet margin; the (minimum) distance in pixels between the left edges of the inner and outer plot area." + }, + "facetMarginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The top facet margin; the (minimum) distance in pixels between the top edges of the inner and outer plot area." + }, + "fxAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "fxAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "fxAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "fxAxis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *fx*. Defaults to *top* if there is a *bottom* *x* axis, and otherwise *bottom*.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *fx*). If null, the implicit axis is suppressed." + }, + "fxDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "fxFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "fxGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "fxInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "fxInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "fxInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "fxLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "fxLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "fxLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "fxLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "fxPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "fxPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "fxPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "fxRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and the plot’s dimensions. For ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "fxReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "fxRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "fxTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "fxTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **fxTickSize** and\n**fxTickRotate**." + }, + "fxTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "fxTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "fxTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "fxTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "fyAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "fyAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "fyAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "fyAxis": { + "anyOf": [ + { + "const": "left", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *left* or\n*right* for *fy*. Defaults to *left* for an *fy* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*left* and *right* for *fy*). If null, the implicit axis is suppressed." + }, + "fyDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "fyFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "fyGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "fyInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "fyInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "fyInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "fyLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "fyLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "fyLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "fyLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "fyPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "fyPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "fyPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "fyRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and the plot’s dimensions. For ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "fyReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "fyRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "fyTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "fyTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **fyTickSize** and\n**fyTickRotate**." + }, + "fyTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "fyTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "fyTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "fyTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "grid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The outer height of the plot in pixels, including margins. The default depends on the plot’s scales, and the plot’s width if an aspectRatio is specified. For example, if the *y* scale is linear and there is no *fy* scale, it might be 396." + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "lengthBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "lengthClamp": { + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "lengthConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "lengthDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero. Radius scales have a default domain from 0 to the median first quartile of associated channels. Length have a default domain from 0 to the median median of associated channels. Opacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "lengthExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "lengthNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "lengthPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "lengthRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nLength scales have a default range of [0, 12]." + }, + "lengthScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *length* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The length scale defaults to *linear*, as this scale is intended for quantitative data." + }, + "lengthZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**. Otherwise, the default margins depend on the maximum margins of the plot’s marks. While most marks default to zero margins (because they are drawn inside the chart area), Plot’s axis marks have non-zero default margins." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bottom margin; the distance in pixels between the bottom edges of the inner and outer plot area. Defaults to the maximum bottom margin of the plot’s marks." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The left margin; the distance in pixels between the left edges of the inner and outer plot area. Defaults to the maximum left margin of the plot’s marks." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The right margin; the distance in pixels between the right edges of the inner and outer plot area. Defaults to the maximum right margin of the plot’s marks." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The top margin; the distance in pixels between the top edges of the inner and outer plot area. Defaults to the maximum top margin of the plot’s marks." + }, + "margins": { + "additionalProperties": false, + "description": "A shorthand object notation for setting multiple margin values. The object keys are margin names (top, right, etc).", + "properties": { + "bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "left": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "right": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "top": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "name": { + "description": "A unique name for the plot. The name is used by standalone legend components to to lookup the plot and access scale mappings.", + "type": "string" + }, + "opacityBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "opacityClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "opacityConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "opacityDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nOpacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "opacityExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "opacityLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "opacityNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "opacityPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "opacityRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values).\n\nOpacity scales have a default range of [0, 1]." + }, + "opacityReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "opacityScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *opacity* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The opacity scale defaults to *linear*; this scales is intended for quantitative data." + }, + "opacityTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "opacityZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "padding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "projectionClip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "const": "frame", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The projection’s clipping method; one of:\n\n- *frame* or true (default) - clip to the plot’s frame (including margins but not insets)\n- a number - clip to a circle of the given radius in degrees centered around the origin\n- null or false - do not clip\n\nSome projections (such as [*armadillo*][1] and [*berghaus*][2]) require spherical clipping: in that case set the marks’ **clip** option to\n*sphere*.\n\n[1]: https://observablehq.com/@d3/armadillo [2]: https://observablehq.com/@d3/berghaus-star" + }, + "projectionDomain": { + "anyOf": [ + { + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A GeoJSON object to fit to the plot’s frame (minus insets); defaults to a Sphere for spherical projections (outline of the the whole globe)." + }, + "projectionInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four projection insets. All insets typically default to zero, though not always. A positive inset reduces effective area, while a negative inset increases it." + }, + "projectionInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge of the projection by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "projectionInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge of the projection by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "projectionInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge of the projection by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "projectionInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge of the projection by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "projectionParallels": { + "anyOf": [ + { + "items": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y1" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y2" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [standard parallels][1]. For conic projections only.\n\n[1]: https://d3js.org/d3-geo/conic#conic_parallels" + }, + "projectionPrecision": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The projection’s [sampling threshold][1].\n\n[1]: https://d3js.org/d3-geo/projection#projection_precision" + }, + "projectionRotate": { + "anyOf": [ + { + "items": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "x" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "z" + } + ], + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A rotation of the sphere before projection; defaults to [0, 0, 0]. Specified as Euler angles λ (yaw, or reference longitude), φ (pitch, or reference latitude), and optionally γ (roll), in degrees." + }, + "projectionType": { + "anyOf": [ + { + "$ref": "#/definitions/ProjectionName" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired projection; one of:\n\n- a named built-in projection such as *albers-usa*\n- null, for no projection\n\nNamed projections are scaled and translated to fit the **domain** to the plot’s frame (minus insets)." + }, + "rBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "rClamp": { + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "rConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "rDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nRadius scales have a default domain from 0 to the median first quartile of associated channels." + }, + "rExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "rLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value." + }, + "rNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "rPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "rRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nRadius scales have a default range of [0, 3]." + }, + "rScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *r* (radius) scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The radius scale defaults to *sqrt*; this scale is intended for quantitative data." + }, + "rZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "style": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/CSSStyles" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Custom styles to override Plot’s defaults. Styles may be specified either as a string of inline styles (*e.g.*, `\"color: red;\"`, in the same fashion as assigning [*element*.style][1]) or an object of properties (*e.g.*, `{color: \"red\"}`, in the same fashion as assigning [*element*.style properties][2]). Note that unitless numbers ([quirky lengths][3]) such as `{padding: 20}` may not supported by some browsers; you should instead specify a string with units such as `{padding: \"20px\"}`. By default, the returned plot has a max-width of 100%, and the system-ui font. Plot’s marks and axes default to [currentColor][4], meaning that they will inherit the surrounding content’s color.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style [2]: https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration [3]: https://www.w3.org/TR/css-values-4/#deprecated-quirky-length [4]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentcolor_keyword" + }, + "symbolDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. As symbol scales are discrete, the domain is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "symbolRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nSymbol scales have a default range of categorical symbols; the choice of symbols depends on whether the associated dot mark is filled or stroked." + }, + "symbolScale": { + "anyOf": [ + { + "$ref": "#/definitions/DiscreteScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *symbol* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. Defaults to an *ordinal* scale type." + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The outer width of the plot in pixels, including margins. Defaults to 640. On Observable, this can be set to the built-in [width][1] for full-width responsive plots. Note: the default style has a max-width of 100%; the plot will automatically shrink to fit even when a fixed width is specified.\n\n[1]: https://github.com/observablehq/stdlib/blob/main/README.md#width" + }, + "xAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "xAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "xAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "xAxis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *x*. Defaults to *bottom* for an *x* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *x*). If null, the implicit axis is suppressed." + }, + "xBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "xClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "xConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "xDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero. Radius scales have a default domain from 0 to the median first quartile of associated channels. Length have a default domain from 0 to the median median of associated channels. Opacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "xExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "xFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "xGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "xInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "xInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "xInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "xLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "xLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "xLabelArrow": { + "anyOf": [ + { + "$ref": "#/definitions/LabelArrow" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the x-axis scale label. If *auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "xLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "xLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "xNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "xPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "xPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "xPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "xPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "xRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "xReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "xRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "xScale": { + "anyOf": [ + { + "$ref": "#/definitions/PositionScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *x* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, *categorical* for color scales, and otherwise *ordinal*. However, the radius scale defaults to *sqrt*, and the length and opacity scales default to *linear*; these scales are intended for quantitative data. The plot’s marks may also impose a scale type; for example, the barY mark requires that *x* is a *band* scale." + }, + "xTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "xTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "xTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "xTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "xTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "xTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "xZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "xyDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Set the *x* and *y* scale domains." + }, + "yAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "yAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "yAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "yAxis": { + "anyOf": [ + { + "const": "left", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *left* or\n*right* for *y*. Defaults to *left* for a *y* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*left* and *right* for *y*). If null, the implicit axis is suppressed." + }, + "yBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "yClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "yConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "yDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero." + }, + "yExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "yFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "yGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "yInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "yInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "yInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "yLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "yLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "yLabelArrow": { + "anyOf": [ + { + "$ref": "#/definitions/LabelArrow" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the x-axis scale label. If *auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "yLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "yLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "yNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "yPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "yPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "yPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "yPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "yRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*,\n*max*]; it can be [*max*, *min*] to reverse the scale." + }, + "yReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**. Note that by default, when the *y* scale is continuous, the *max* value points to the top of the screen, whereas ordinal values are ranked from top to bottom." + }, + "yRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "yScale": { + "anyOf": [ + { + "$ref": "#/definitions/PositionScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *y* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, The plot’s marks may also impose a scale type; for example, the barY mark requires that *x* is a *band* scale." + }, + "yTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "yTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **yTickSize** and\n**yTickRotate**." + }, + "yTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "yTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "yTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "yTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "yZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + } + }, + "type": "object" + }, + "PlotDataInline": { + "description": "An array of inline data values to visualize. As this data does not come from a database, it can not be filtered by interactive selections.", + "items": {}, + "type": "array" + }, + "PlotFrom": { + "additionalProperties": false, + "description": "Input data specification for a plot mark.", + "properties": { + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection that filters the mark data." + }, + "from": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The name of the backing data table." + }, + "optimize": { + "description": "A flag (default `true`) to enable any mark-specific query optimizations. If `false`, optimizations are disabled to aid testing and debugging.", + "type": "boolean" + } + }, + "required": [ + "from" + ], + "type": "object" + }, + "PlotInteractor": { + "anyOf": [ + { + "$ref": "#/definitions/Highlight" + }, + { + "$ref": "#/definitions/IntervalX" + }, + { + "$ref": "#/definitions/IntervalY" + }, + { + "$ref": "#/definitions/IntervalXY" + }, + { + "$ref": "#/definitions/NearestX" + }, + { + "$ref": "#/definitions/NearestY" + }, + { + "$ref": "#/definitions/Pan" + }, + { + "$ref": "#/definitions/PanX" + }, + { + "$ref": "#/definitions/PanY" + }, + { + "$ref": "#/definitions/PanZoom" + }, + { + "$ref": "#/definitions/PanZoomX" + }, + { + "$ref": "#/definitions/PanZoomY" + }, + { + "$ref": "#/definitions/Region" + }, + { + "$ref": "#/definitions/Toggle" + }, + { + "$ref": "#/definitions/ToggleX" + }, + { + "$ref": "#/definitions/ToggleY" + }, + { + "$ref": "#/definitions/ToggleColor" + } + ], + "description": "A plot interactor entry." + }, + "PlotLegend": { + "additionalProperties": false, + "description": "A legend defined as an entry within a plot.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. If specified, the legend is interactive, using a `toggle` interaction for discrete legends or an `intervalX` interaction for continuous legends." + }, + "columns": { + "description": "The number of columns to use to layout a discrete legend.", + "type": "number" + }, + "field": { + "description": "The data field over which to generate output selection clauses. If unspecified, a matching field is retrieved from existing plot marks.", + "type": "string" + }, + "height": { + "description": "The height of a continuous legend, in pixels.", + "type": "number" + }, + "label": { + "description": "The legend label.", + "type": "string" + }, + "legend": { + "description": "A legend of the given type. The valid types are `\"color\"`, `\"opacity\"`, and `\"symbol\"`.", + "enum": [ + "color", + "opacity", + "symbol" + ], + "type": "string" + }, + "marginBottom": { + "description": "The bottom margin of the legend component, in pixels.", + "type": "number" + }, + "marginLeft": { + "description": "The left margin of the legend component, in pixels.", + "type": "number" + }, + "marginRight": { + "description": "The right margin of the legend component, in pixels.", + "type": "number" + }, + "marginTop": { + "description": "The top margin of the legend component, in pixels.", + "type": "number" + }, + "tickSize": { + "description": "The size of legend ticks in a continuous legend, in pixels.", + "type": "number" + }, + "width": { + "description": "The width of a continuous legend, in pixels.", + "type": "number" + } + }, + "required": [ + "legend" + ], + "type": "object" + }, + "PlotMark": { + "anyOf": [ + { + "$ref": "#/definitions/Area" + }, + { + "$ref": "#/definitions/AreaX" + }, + { + "$ref": "#/definitions/AreaY" + }, + { + "$ref": "#/definitions/Arrow" + }, + { + "$ref": "#/definitions/AxisX" + }, + { + "$ref": "#/definitions/AxisY" + }, + { + "$ref": "#/definitions/AxisFx" + }, + { + "$ref": "#/definitions/AxisFy" + }, + { + "$ref": "#/definitions/GridX" + }, + { + "$ref": "#/definitions/GridY" + }, + { + "$ref": "#/definitions/GridFx" + }, + { + "$ref": "#/definitions/GridFy" + }, + { + "$ref": "#/definitions/BarX" + }, + { + "$ref": "#/definitions/BarY" + }, + { + "$ref": "#/definitions/Cell" + }, + { + "$ref": "#/definitions/CellX" + }, + { + "$ref": "#/definitions/CellY" + }, + { + "$ref": "#/definitions/Contour" + }, + { + "$ref": "#/definitions/DelaunayLink" + }, + { + "$ref": "#/definitions/DelaunayMesh" + }, + { + "$ref": "#/definitions/Hull" + }, + { + "$ref": "#/definitions/Voronoi" + }, + { + "$ref": "#/definitions/VoronoiMesh" + }, + { + "$ref": "#/definitions/DenseLine" + }, + { + "$ref": "#/definitions/Density" + }, + { + "$ref": "#/definitions/DensityX" + }, + { + "$ref": "#/definitions/DensityY" + }, + { + "$ref": "#/definitions/Dot" + }, + { + "$ref": "#/definitions/DotX" + }, + { + "$ref": "#/definitions/DotY" + }, + { + "$ref": "#/definitions/Circle" + }, + { + "$ref": "#/definitions/Hexagon" + }, + { + "$ref": "#/definitions/ErrorBarX" + }, + { + "$ref": "#/definitions/ErrorBarY" + }, + { + "$ref": "#/definitions/Frame" + }, + { + "$ref": "#/definitions/Geo" + }, + { + "$ref": "#/definitions/Graticule" + }, + { + "$ref": "#/definitions/Sphere" + }, + { + "$ref": "#/definitions/Hexbin" + }, + { + "$ref": "#/definitions/Hexgrid" + }, + { + "$ref": "#/definitions/Image" + }, + { + "$ref": "#/definitions/Line" + }, + { + "$ref": "#/definitions/LineX" + }, + { + "$ref": "#/definitions/LineY" + }, + { + "$ref": "#/definitions/Link" + }, + { + "$ref": "#/definitions/Raster" + }, + { + "$ref": "#/definitions/Heatmap" + }, + { + "$ref": "#/definitions/RasterTile" + }, + { + "$ref": "#/definitions/Rect" + }, + { + "$ref": "#/definitions/RectX" + }, + { + "$ref": "#/definitions/RectY" + }, + { + "$ref": "#/definitions/RegressionY" + }, + { + "$ref": "#/definitions/RuleX" + }, + { + "$ref": "#/definitions/RuleY" + }, + { + "$ref": "#/definitions/Text" + }, + { + "$ref": "#/definitions/TextX" + }, + { + "$ref": "#/definitions/TextY" + }, + { + "$ref": "#/definitions/TickX" + }, + { + "$ref": "#/definitions/TickY" + }, + { + "$ref": "#/definitions/Vector" + }, + { + "$ref": "#/definitions/VectorX" + }, + { + "$ref": "#/definitions/VectorY" + }, + { + "$ref": "#/definitions/Spike" + }, + { + "$ref": "#/definitions/WaffleX" + }, + { + "$ref": "#/definitions/WaffleY" + } + ], + "description": "A plot mark entry." + }, + "PlotMarkData": { + "anyOf": [ + { + "$ref": "#/definitions/PlotDataInline" + }, + { + "$ref": "#/definitions/PlotFrom" + } + ], + "description": "Input data for a marks" + }, + "PositionScaleType": { + "description": "The supported scale types for *x* and *y* position encodings.\n\nFor quantitative data, one of:\n\n- *linear* (default) - linear transform (translate and scale)\n- *pow* - power (exponential) transform\n- *sqrt* - square-root transform; *pow* with *exponent* = 0.5\n- *log* - logarithmic transform\n- *symlog* - bi-symmetric logarithmic transform per Webber et al.\n\nFor temporal data, one of:\n\n- *utc* (default, recommended) - UTC time\n- *time* - local time\n\nFor ordinal data, one of:\n\n- *point* (for position only) - divide a continuous range into discrete points\n- *band* (for position only) - divide a continuous range into discrete points\n\nOther scale types:\n\n- *identity* - do not transform values when encoding", + "enum": [ + "linear", + "pow", + "sqrt", + "log", + "symlog", + "utc", + "time", + "point", + "band", + "threshold", + "quantile", + "quantize", + "identity" + ], + "type": "string" + }, + "Product": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "product": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the product of the given column." + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "product" + ], + "type": "object" + }, + "ProjectionName": { + "description": "The built-in projection implementations; one of:\n\n- *albers-usa* - a U.S.-centric composite projection with insets for Alaska and Hawaii\n- *albers* - a U.S.-centric *conic-equal-area* projection\n- *azimuthal-equal-area* - the azimuthal equal-area projection\n- *azimuthal-equidistant* - the azimuthal equidistant projection\n- *conic-conformal* - the conic conformal projection\n- *conic-equal-area* - the conic equal-area projection\n- *conic-equidistant* - the conic equidistant projection\n- *equal-earth* - the Equal Earth projection Šavrič et al., 2018\n- *equirectangular* - the equirectangular (plate carrée) projection\n- *gnomonic* - the gnomonic projection\n- *identity* - the identity projection\n- *reflect-y* - the identity projection, but flipping *y*\n- *mercator* - the spherical Mercator projection\n- *orthographic* - the orthographic projection\n- *stereographic* - the stereographic projection\n- *transverse-mercator* - the transverse spherical Mercator projection", + "enum": [ + "albers-usa", + "albers", + "azimuthal-equal-area", + "azimuthal-equidistant", + "conic-conformal", + "conic-equal-area", + "conic-equidistant", + "equal-earth", + "equirectangular", + "gnomonic", + "identity", + "reflect-y", + "mercator", + "orthographic", + "stereographic", + "transverse-mercator" + ], + "type": "string" + }, + "Quantile": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "quantile": { + "description": "Compute the quantile value of the given column at the provided probability threshold. For example, 0.5 is the median.", + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "quantile" + ], + "type": "object" + }, + "Rank": { + "additionalProperties": false, + "properties": { + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rank": { + "anyOf": [ + { + "type": "null" + }, + { + "maxItems": 0, + "minItems": 0, + "type": "array" + } + ], + "description": "Compute the row rank over an ordered window partition. Sorting ties result in gaps in the rank numbers ([1, 1, 3, ...])." + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "rank" + ], + "type": "object" + }, + "Raster": { + "additionalProperties": false, + "description": "The raster mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "raster", + "description": "A raster mark which renders a raster image from spatial samples. It represents discrete samples in abstract coordinates **x** and **y**; the **fill** and **fillOpacity** channels specify further abstract values (_e.g._, height in a topographic map) to be spatially interpolated to produce an image.\n\nThe **x** and **y** data domains are binned into the cells (\"pixels\") of a raster grid, typically with an aggregate function evaluated over the binned data. The result can be optionally smoothed (blurred).\n\nTo create a smoothed density heatmap, use the heatmap mark, which is a raster mark with different default options.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "RasterTile": { + "additionalProperties": false, + "description": "The rasterTile mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rasterTile", + "description": "An experimental raster mark which performs tiling and prefetching to support more scalable rasters upon panning the domain. Uses a tile size that matches with current width and height, and prefetches data from neighboring tile segments.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "origin": { + "anyOf": [ + { + "items": { + "type": "number" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The coordinates of the tile origin in the **x** and **y** data domains. Defaults to [0, 0]." + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Rect": { + "additionalProperties": false, + "description": "The rect mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for rectY, **y** for rectX, or both for rect) into an interval (**x1** and **x2** for rectY, or **y1** and\n**y2** for rectX, or both for rect); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for rectX, or stackY for rectY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rect", + "description": "A rect mark. The rectangle extends horizontally from **x1** to **x2**, and vertically from **y1** to **y2**. The position channels are often derived with a transform.\n\nWhen **y** extends from zero, for example for a histogram where the height of each rect reflects a count of values, use the rectY mark for an implicit stackY transform; similarly, if **x** extends from zero, use the rectX mark for an implicit stackX transform.\n\nIf an **interval** is specified, then **x1** and **x2** are derived from\n**x**, and **y1** and **y2** are derived from **y**, each representing the lower and upper bound of the containing interval, respectively.\n\nBoth *x* and *y* should be quantitative or temporal; otherwise, use a bar or cell mark.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf an **interval** is specified, then **x1** and **x2** are derived from\n**x**, representing the lower and upper bound of the containing interval, respectively. For example, for a vertical bar chart of items sold by day:\n\n```js Plot.rectY(sales, {x: \"date\", interval: \"day\", y2: \"items\"}) ```\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf an **interval** is specified, then **y1** and **y2** are derived from\n**y**, representing the lower and upper bound of the containing interval, respectively. For example, for a horizontal bar chart of items sold by day:\n\n```js Plot.rectX(sales, {y: \"date\", interval: \"day\", x2: \"items\"}) ```\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "RectX": { + "additionalProperties": false, + "description": "The rectX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for rectY, **y** for rectX, or both for rect) into an interval (**x1** and **x2** for rectY, or **y1** and\n**y2** for rectX, or both for rect); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for rectX, or stackY for rectY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rectX", + "description": "Like rect, but if neither **x1** nor **x2** is specified, an implicit stackX transform is applied to **x**, and if **x** is not specified, it defaults to the identity function, assuming that *data* is an array of numbers [*x₀*, *x₁*, *x₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf neither **x1** nor **x2** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf an **interval** is specified, then **y1** and **y2** are derived from\n**y**, representing the lower and upper bound of the containing interval, respectively. For example, for a horizontal bar chart of items sold by day:\n\n```js Plot.rectX(sales, {y: \"date\", interval: \"day\", x2: \"items\"}) ```\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "RectY": { + "additionalProperties": false, + "description": "The rectY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for rectY, **y** for rectX, or both for rect) into an interval (**x1** and **x2** for rectY, or **y1** and\n**y2** for rectX, or both for rect); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for rectX, or stackY for rectY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rectY", + "description": "Like rect, but if neither **y1** nor **y2** is specified, apply an implicit stackY transform is applied to **y**, and if **y** is not specified, it defaults to the identity function, assuming that *data* is an array of numbers [*y₀*, *y₁*, *y₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf an **interval** is specified, then **x1** and **x2** are derived from\n**x**, representing the lower and upper bound of the containing interval, respectively. For example, for a vertical bar chart of items sold by day:\n\n```js Plot.rectY(sales, {x: \"date\", interval: \"day\", y2: \"items\"}) ```\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf neither **y1** nor **y2** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Reducer": { + "anyOf": [ + { + "const": "first", + "type": "string" + }, + { + "const": "last", + "type": "string" + }, + { + "const": "identity", + "type": "string" + }, + { + "const": "count", + "type": "string" + }, + { + "const": "distinct", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "proportion", + "type": "string" + }, + { + "const": "proportion-facet", + "type": "string" + }, + { + "const": "deviation", + "type": "string" + }, + { + "const": "min", + "type": "string" + }, + { + "const": "min-index", + "type": "string" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "max-index", + "type": "string" + }, + { + "const": "mean", + "type": "string" + }, + { + "const": "median", + "type": "string" + }, + { + "const": "variance", + "type": "string" + }, + { + "const": "mode", + "type": "string" + }, + { + "$ref": "#/definitions/ReducerPercentile" + } + ], + "description": "How to reduce aggregated (binned or grouped) values; one of:\n\n- *first* - the first value, in input order\n- *last* - the last value, in input order\n- *count* - the number of elements (frequency)\n- *distinct* - the number of distinct values\n- *sum* - the sum of values\n- *proportion* - the sum proportional to the overall total (weighted frequency)\n- *proportion-facet* - the sum proportional to the facet total\n- *deviation* - the standard deviation\n- *min* - the minimum value\n- *min-index* - the zero-based index of the minimum value\n- *max* - the maximum value\n- *max-index* - the zero-based index of the maximum value\n- *mean* - the mean value (average)\n- *median* - the median value\n- *variance* - the variance per [Welford’s algorithm][1]\n- *mode* - the value with the most occurrences\n- *pXX* - the percentile value, where XX is a number in [00,99]\n- *identity* - the array of values\n\n[1]: https://en.wikipedia.org/wiki/Algorithms_for_calculating_variance#Welford's_online_algorithm" + }, + "ReducerPercentile": { + "enum": [ + "p00", + "p01", + "p02", + "p03", + "p04", + "p05", + "p06", + "p07", + "p08", + "p09", + "p10", + "p11", + "p12", + "p13", + "p14", + "p15", + "p16", + "p17", + "p18", + "p19", + "p20", + "p21", + "p22", + "p23", + "p24", + "p25", + "p26", + "p27", + "p28", + "p29", + "p30", + "p31", + "p32", + "p33", + "p34", + "p35", + "p36", + "p37", + "p38", + "p39", + "p40", + "p41", + "p42", + "p43", + "p44", + "p45", + "p46", + "p47", + "p48", + "p49", + "p50", + "p51", + "p52", + "p53", + "p54", + "p55", + "p56", + "p57", + "p58", + "p59", + "p60", + "p61", + "p62", + "p63", + "p64", + "p65", + "p66", + "p67", + "p68", + "p69", + "p70", + "p71", + "p72", + "p73", + "p74", + "p75", + "p76", + "p77", + "p78", + "p79", + "p80", + "p81", + "p82", + "p83", + "p84", + "p85", + "p86", + "p87", + "p88", + "p89", + "p90", + "p91", + "p92", + "p93", + "p94", + "p95", + "p96", + "p97", + "p98", + "p99" + ], + "type": "string" + }, + "Region": { + "additionalProperties": false, + "description": "A rectangular region interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `(field = value1) OR (field = value2) ...` is added for the currently selected values." + }, + "brush": { + "$ref": "#/definitions/BrushStyles", + "description": "CSS styles for the brush (SVG `rect`) element." + }, + "channels": { + "description": "The encoding channels over which to select values. For a selected mark, selection clauses will cover the backing data fields for each channel.", + "items": { + "type": "string" + }, + "type": "array" + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "select": { + "const": "region", + "description": "Select aspects of individual marks within a 2D range.", + "type": "string" + } + }, + "required": [ + "as", + "channels", + "select" + ], + "type": "object" + }, + "RegressionY": { + "additionalProperties": false, + "description": "The regressionY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "ci": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The confidence interval in (0, 1), or 0 to hide bands; defaults to 0.95." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "regressionY", + "description": "A mark that draws [linear regression][1] lines with confidence bands, representing the estimated relation of a dependent variable (*y*) on an independent variable (*x*).\n\nThe linear regression line is fit using the [least squares][2] approach. See Torben Jansen’s [“Linear regression with confidence bands”][3] and [this StatExchange question][4] for details on the confidence interval calculation.\n\nMultiple regressions can be produced by specifying a **z**, **fill**, or\n**stroke** channel.\n\n[1]: https://en.wikipedia.org/wiki/Linear_regression [2]: https://en.wikipedia.org/wiki/Least_squares [3]: https://observablehq.com/@toja/linear-regression-with-confidence-bands [4]: https://stats.stackexchange.com/questions/101318/understanding-shape-and-calculation-of-confidence-bands-in-linear-regression", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "precision": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance in pixels between samples of the confidence band; defaults to 4." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The independent variable horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The dependent variable vertical position channel, typically bound to the\n*y* scale; defaults to identity, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series, producing an independent regression for each group. If not specified, it defaults to **fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "RowNumber": { + "additionalProperties": false, + "properties": { + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "row_number": { + "anyOf": [ + { + "type": "null" + }, + { + "maxItems": 0, + "minItems": 0, + "type": "array" + } + ], + "description": "Compute the 1-based row number over an ordered window partition." + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "required": [ + "row_number" + ], + "type": "object" + }, + "RuleX": { + "additionalProperties": false, + "description": "The ruleX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**y** for ruleX, or **x** for ruleY) into an interval (**y1** and **y2** for ruleX, or **x1** and **x2** for ruleY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "ruleX", + "description": "A horizontally-positioned ruleX mark (a vertical line, |). The **x** channel specifies the rule’s horizontal position and defaults to identity, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]; the optional **y1** and\n**y2** channels specify its vertical extent.\n\nThe ruleX mark is often used to highlight specific *x* values. If *y* represents ordinal values, use a tickX mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "RuleY": { + "additionalProperties": false, + "description": "The ruleY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**y** for ruleX, or **x** for ruleY) into an interval (**y1** and **y2** for ruleX, or **x1** and **x2** for ruleY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "ruleY", + "description": "A vertically-positioned ruleY mark (a horizontal line, —). The **y** channel specifies the rule's vertical position and defaults to identity, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]; the optional **x1** and\n**x2** channels specify its horizontal extent.\n\nThe ruleY mark is often used to highlight specific *y* values. If *x* represents ordinal values, use a tickY mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "SQLExpression": { + "additionalProperties": false, + "description": "A custom SQL expression.", + "properties": { + "label": { + "description": "A label for this expression, for example to label a plot axis.", + "type": "string" + }, + "sql": { + "description": "A SQL expression string to derive a new column value. Embedded Param refrences, such as `$param + 1`, are supported. For expressions with aggregate functions, use *agg* instead.", + "type": "string" + } + }, + "required": [ + "sql" + ], + "type": "object" + }, + "ScaleName": { + "description": "The built-in scale names; one of:\n\n- *x* - horizontal position\n- *y* - vertical position\n- *fx* - horizontal facet position\n- *fy* - vertical facet position\n- *r* - radius (for dots and point geos)\n- *color* - color\n- *opacity* - opacity\n- *symbol* - categorical symbol (for dots)\n- *length* - length (for vectors)\n\nPosition scales may have associated axes. Color, opacity, and symbol scales may have an associated legend.", + "enum": [ + "x", + "y", + "fx", + "fy", + "r", + "color", + "opacity", + "symbol", + "length" + ], + "type": "string" + }, + "Search": { + "additionalProperties": false, + "description": "A search input component.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for the current text search query." + }, + "column": { + "description": "The name of a database column from which to pull valid search results. The unique column values are used as search autocomplete values. Used in conjunction with the `from` property.", + "type": "string" + }, + "field": { + "description": "The database column name to use within generated selection clause predicates. Defaults to the `column` property.", + "type": "string" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "description": "The name of a database table to use as an autocomplete data source for this widget. Used in conjunction with the `column` property.", + "type": "string" + }, + "input": { + "const": "search", + "description": "A text search input widget.", + "type": "string" + }, + "label": { + "description": "A text label for this input.", + "type": "string" + }, + "type": { + "description": "The type of text search query to perform. One of:\n- `\"contains\"` (default): the query string may appear anywhere in the text\n- `\"prefix\"`: the query string must appear at the start of the text\n- `\"suffix\"`: the query string must appear at the end of the text\n- `\"regexp\"`: the query string is a regular expression the text must match", + "enum": [ + "contains", + "prefix", + "suffix", + "regexp" + ], + "type": "string" + } + }, + "required": [ + "input" + ], + "type": "object" + }, + "SelectFilter": { + "description": "Selection filters to apply internally to mark data.", + "enum": [ + "first", + "last", + "maxX", + "maxY", + "minX", + "minY", + "nearest", + "nearestX", + "nearestY" + ], + "type": "string" + }, + "Selection": { + "additionalProperties": false, + "description": "A Selection definition.", + "properties": { + "cross": { + "description": "A flag for cross-filtering, where selections made in a plot filter others but not oneself (default `false`, except for `crossfilter` selections).", + "type": "boolean" + }, + "empty": { + "description": "A flag for setting an initial empty selection state. If true, a selection with no clauses corresponds to an empty selection with no records. If false, a selection with no clauses selects all values.", + "type": "boolean" + }, + "include": { + "anyOf": [ + { + "$ref": "#/definitions/ParamRef" + }, + { + "items": { + "$ref": "#/definitions/ParamRef" + }, + "type": "array" + } + ], + "description": "Upstream selections whose clauses should be included as part of this selection. Any clauses or activations published to the upstream selections will be relayed to this selection." + }, + "select": { + "description": "The type of reactive parameter. One of:\n- `\"value\"` (default) for a standard `Param`\n- `\"intersect\"` for a `Selection` that intersects clauses (logical \"and\")\n- `\"union\"` for a `Selection` that unions clauses (logical \"or\")\n- `\"single\"` for a `Selection` that retains a single clause only\n- `\"crossfilter\"` for a cross-filtered intersection `Selection`", + "enum": [ + "crossfilter", + "intersect", + "single", + "union" + ], + "type": "string" + } + }, + "required": [ + "select" + ], + "type": "object" + }, + "Slider": { + "additionalProperties": false, + "description": "A slider input component.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for the currently selected slider option." + }, + "column": { + "description": "The name of a database column whose values determine the slider range. Used in conjunction with the `from` property. The minimum and maximum values of the column determine the slider range.", + "type": "string" + }, + "field": { + "description": "The database column name to use within generated selection clause predicates. Defaults to the `column` property.", + "type": "string" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "description": "The name of a database table to use as a data source for this widget. Used in conjunction with the `column` property. The minimum and maximum values of the column determine the slider range.", + "type": "string" + }, + "input": { + "const": "slider", + "description": "A slider input widget.", + "type": "string" + }, + "label": { + "description": "A text label for this input.", + "type": "string" + }, + "max": { + "description": "The maximum slider value.", + "type": "number" + }, + "min": { + "description": "The minumum slider value.", + "type": "number" + }, + "select": { + "description": "The type of selection clause predicate to generate if the **as** option is a Selection. If `'point'` (the default), the selection predicate is an equality check for the slider value. If `'interval'`, the predicate checks an interval from the minimum to the current slider value.", + "enum": [ + "point", + "interval" + ], + "type": "string" + }, + "step": { + "description": "The slider step, the amount to increment between consecutive values.", + "type": "number" + }, + "value": { + "description": "The initial slider value.", + "type": "number" + }, + "width": { + "description": "The width of the slider in screen pixels.", + "type": "number" + } + }, + "required": [ + "input" + ], + "type": "object" + }, + "SortOrder": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "additionalProperties": false, + "properties": { + "order": { + "enum": [ + "ascending", + "descending" + ], + "type": "string" + }, + "value": { + "$ref": "#/definitions/ChannelValue" + } + }, + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "channel": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelName" + }, + { + "const": "-ariaLabel", + "type": "string" + }, + { + "const": "-fill", + "type": "string" + }, + { + "const": "-fillOpacity", + "type": "string" + }, + { + "const": "-fontSize", + "type": "string" + }, + { + "const": "-fx", + "type": "string" + }, + { + "const": "-fy", + "type": "string" + }, + { + "const": "-geometry", + "type": "string" + }, + { + "const": "-height", + "type": "string" + }, + { + "const": "-href", + "type": "string" + }, + { + "const": "-length", + "type": "string" + }, + { + "const": "-opacity", + "type": "string" + }, + { + "const": "-path", + "type": "string" + }, + { + "const": "-r", + "type": "string" + }, + { + "const": "-rotate", + "type": "string" + }, + { + "const": "-src", + "type": "string" + }, + { + "const": "-stroke", + "type": "string" + }, + { + "const": "-strokeOpacity", + "type": "string" + }, + { + "const": "-strokeWidth", + "type": "string" + }, + { + "const": "-symbol", + "type": "string" + }, + { + "const": "-text", + "type": "string" + }, + { + "const": "-title", + "type": "string" + }, + { + "const": "-weight", + "type": "string" + }, + { + "const": "-width", + "type": "string" + }, + { + "const": "-x", + "type": "string" + }, + { + "const": "-x1", + "type": "string" + }, + { + "const": "-x2", + "type": "string" + }, + { + "const": "-y", + "type": "string" + }, + { + "const": "-y1", + "type": "string" + }, + { + "const": "-y2", + "type": "string" + }, + { + "const": "-z", + "type": "string" + } + ] + }, + "order": { + "enum": [ + "ascending", + "descending" + ], + "type": "string" + } + }, + "type": "object" + } + ], + "description": "How to order values; one of:\n\n- a function for comparing data, returning a signed number\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "Spec": { + "anyOf": [ + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "hconcat": { + "description": "Horizontally concatenate components in a row layout.", + "items": { + "$ref": "#/definitions/Component" + }, + "type": "array" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + } + }, + "required": [ + "hconcat" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "vconcat": { + "description": "Vertically concatenate components in a column layout.", + "items": { + "$ref": "#/definitions/Component" + }, + "type": "array" + } + }, + "required": [ + "vconcat" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "hspace": { + "description": "Horizontal space to place between components. Number values indicate screen pixels. String values may use CSS units (em, pt, px, etc).", + "type": [ + "number", + "string" + ] + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + } + }, + "required": [ + "hspace" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "vspace": { + "description": "Vertical space to place between components. Number values indicate screen pixels. String values may use CSS units (em, pt, px, etc).", + "type": [ + "number", + "string" + ] + } + }, + "required": [ + "vspace" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for the currently selected menu option." + }, + "column": { + "description": "The name of a database column from which to pull menu options. The unique column values are used as menu options. Used in conjunction with the `from` property.", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "field": { + "description": "The database column name to use within generated selection clause predicates. Defaults to the `column` property.", + "type": "string" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "description": "The name of a database table to use as a data source for this widget. Used in conjunction with the `column` property.", + "type": "string" + }, + "input": { + "const": "menu", + "description": "A menu input widget.", + "type": "string" + }, + "label": { + "description": "A text label for this input.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "options": { + "description": "An array of menu options, as literal values or option objects. Option objects have a `value` property and an optional `label` property. If no label is provided, the string-coerced value is used.", + "items": { + "anyOf": [ + {}, + { + "additionalProperties": false, + "properties": { + "label": { + "type": "string" + }, + "value": {} + }, + "required": [ + "value" + ], + "type": "object" + } + ] + }, + "type": "array" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "value": { + "description": "The initial selected menu value." + } + }, + "required": [ + "input" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for the current text search query." + }, + "column": { + "description": "The name of a database column from which to pull valid search results. The unique column values are used as search autocomplete values. Used in conjunction with the `from` property.", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "field": { + "description": "The database column name to use within generated selection clause predicates. Defaults to the `column` property.", + "type": "string" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "description": "The name of a database table to use as an autocomplete data source for this widget. Used in conjunction with the `column` property.", + "type": "string" + }, + "input": { + "const": "search", + "description": "A text search input widget.", + "type": "string" + }, + "label": { + "description": "A text label for this input.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "type": { + "description": "The type of text search query to perform. One of:\n- `\"contains\"` (default): the query string may appear anywhere in the text\n- `\"prefix\"`: the query string must appear at the start of the text\n- `\"suffix\"`: the query string must appear at the end of the text\n- `\"regexp\"`: the query string is a regular expression the text must match", + "enum": [ + "contains", + "prefix", + "suffix", + "regexp" + ], + "type": "string" + } + }, + "required": [ + "input" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for the currently selected slider option." + }, + "column": { + "description": "The name of a database column whose values determine the slider range. Used in conjunction with the `from` property. The minimum and maximum values of the column determine the slider range.", + "type": "string" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "field": { + "description": "The database column name to use within generated selection clause predicates. Defaults to the `column` property.", + "type": "string" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "description": "The name of a database table to use as a data source for this widget. Used in conjunction with the `column` property. The minimum and maximum values of the column determine the slider range.", + "type": "string" + }, + "input": { + "const": "slider", + "description": "A slider input widget.", + "type": "string" + }, + "label": { + "description": "A text label for this input.", + "type": "string" + }, + "max": { + "description": "The maximum slider value.", + "type": "number" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "min": { + "description": "The minumum slider value.", + "type": "number" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "select": { + "description": "The type of selection clause predicate to generate if the **as** option is a Selection. If `'point'` (the default), the selection predicate is an equality check for the slider value. If `'interval'`, the predicate checks an interval from the minimum to the current slider value.", + "enum": [ + "point", + "interval" + ], + "type": "string" + }, + "step": { + "description": "The slider step, the amount to increment between consecutive values.", + "type": "number" + }, + "value": { + "description": "The initial slider value.", + "type": "number" + }, + "width": { + "description": "The width of the slider in screen pixels.", + "type": "number" + } + }, + "required": [ + "input" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "align": { + "additionalProperties": { + "enum": [ + "left", + "right", + "center", + "justify" + ], + "type": "string" + }, + "description": "An object of per-column alignment values. Column names should be object keys, which map to alignment values. Valid alignment values are: `\"left\"`, `\"right\"`, `\"center\"`, and `\"justify\"`. By default, numbers are right-aligned and other values are left-aligned.", + "type": "object" + }, + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for each currently selected table row." + }, + "columns": { + "description": "A list of column names to include in the table grid. If unspecified, all table columns are included.", + "items": { + "type": "string" + }, + "type": "array" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The name of a database table to use as a data source for this widget." + }, + "height": { + "description": "The height of the table widget, in pixels.", + "type": "number" + }, + "input": { + "const": "table", + "description": "A table grid widget.", + "type": "string" + }, + "maxWidth": { + "description": "The maximum width of the table widget, in pixels.", + "type": "number" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "rowBatch": { + "description": "The number of rows load in a new batch upon table scroll.", + "type": "number" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "additionalProperties": { + "type": "number" + }, + "type": "object" + } + ], + "description": "If a number, sets the total width of the table widget, in pixels. If an object, provides per-column pixel width values. Column names should be object keys, mapped to numeric width values." + } + }, + "required": [ + "from", + "input" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "align": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "ariaDescription": { + "description": "The [aria-description attribute][1] on the SVG root.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description", + "type": [ + "string", + "null" + ] + }, + "ariaLabel": { + "description": "The [aria-label attribute][1] on the SVG root.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label", + "type": [ + "string", + "null" + ] + }, + "aspectRatio": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired aspect ratio of the *x* and *y* scales, affecting the default height. Given an aspect ratio of *dx* / *dy*, and assuming that the *x* and\n*y* scales represent equivalent units (say, degrees Celsius or meters), computes a default height such that *dx* pixels along *x* represents the same variation as *dy* pixels along *y*. Note: when faceting, set the *fx* and *fy* scales’ **round** option to false for an exact aspect ratio." + }, + "axis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *x* or *fx*, or *left* or *right* for *y* or *fy*. The default depends on the scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *x* or *fx*, or *left* and *right* for *y* or\n*fy*). If null, the implicit axis is suppressed.\n\nFor position axes only." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The default clip for all marks." + }, + "colorBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* and *diverging-log* scales only." + }, + "colorClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "colorConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* and *diverging-symlog* scales only." + }, + "colorDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "colorExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* and *diverging-pow* scales only." + }, + "colorInterpolate": { + "anyOf": [ + { + "$ref": "#/definitions/Interpolate" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to interpolate color range values. For quantitative scales only. This attribute can be used to specify a color space for interpolating colors specified in the **colorRange**." + }, + "colorLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "colorN": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *quantile* scale, the number of quantiles (creates *n* - 1 thresholds); for a *quantize* scale, the approximate number of thresholds; defaults to 5." + }, + "colorNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "colorPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "colorPivot": { + "anyOf": [ + {}, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a diverging color scale, the input value (abstract value) that divides the domain into two parts; defaults to 0 for *diverging* scales, dividing the domain into negative and positive parts; defaults to 1 for\n*diverging-log* scales. By default, diverging scales are symmetric around the pivot; see the **symmetric** option." + }, + "colorRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**. For other ordinal data, it is an array (or iterable) of output values in the same order as the **domain**." + }, + "colorReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "colorScale": { + "anyOf": [ + { + "$ref": "#/definitions/ColorScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *color* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, *categorical* for color scales, and otherwise *ordinal*." + }, + "colorScheme": { + "anyOf": [ + { + "$ref": "#/definitions/ColorScheme" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If specified, shorthand for setting the **colorRange** or **colorInterpolate** option of a *color* scale." + }, + "colorSymmetric": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a diverging color scale, if true (the default), extend the domain to ensure that the lower part of the domain (below the **pivot**) is commensurate with the upper part of the domain (above the **pivot**).\n\nA symmetric diverging color scale may not use all of its output **range**; this reduces contrast but ensures that deviations both below and above the\n**pivot** are represented proportionally. Otherwise if false, the full output **range** will be used; this increases contrast but values on opposite sides of the **pivot** may not be meaningfully compared." + }, + "colorTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "colorZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "facetGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Default axis grid for fx and fy scales; typically set to true to enable." + }, + "facetLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Default axis label for fx and fy scales; typically set to null to disable." + }, + "facetMargin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four facet margins: marginTop, marginRight, marginBottom, and marginLeft." + }, + "facetMarginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The right facet margin; the (minimum) distance in pixels between the right edges of the inner and outer plot area." + }, + "facetMarginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bottom facet margin; the (minimum) distance in pixels between the bottom edges of the inner and outer plot area." + }, + "facetMarginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The left facet margin; the (minimum) distance in pixels between the left edges of the inner and outer plot area." + }, + "facetMarginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The top facet margin; the (minimum) distance in pixels between the top edges of the inner and outer plot area." + }, + "fxAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "fxAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "fxAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "fxAxis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *fx*. Defaults to *top* if there is a *bottom* *x* axis, and otherwise *bottom*.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *fx*). If null, the implicit axis is suppressed." + }, + "fxDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "fxFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "fxGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "fxInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "fxInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "fxInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "fxLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "fxLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "fxLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "fxLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "fxPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "fxPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "fxPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "fxRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and the plot’s dimensions. For ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "fxReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "fxRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "fxTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "fxTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **fxTickSize** and\n**fxTickRotate**." + }, + "fxTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "fxTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "fxTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "fxTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "fyAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "fyAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "fyAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "fyAxis": { + "anyOf": [ + { + "const": "left", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *left* or\n*right* for *fy*. Defaults to *left* for an *fy* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*left* and *right* for *fy*). If null, the implicit axis is suppressed." + }, + "fyDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "fyFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "fyGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "fyInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "fyInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "fyInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "fyLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "fyLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "fyLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "fyLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "fyPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "fyPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "fyPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "fyRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and the plot’s dimensions. For ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "fyReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "fyRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "fyTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "fyTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **fyTickSize** and\n**fyTickRotate**." + }, + "fyTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "fyTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "fyTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "fyTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "grid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The outer height of the plot in pixels, including margins. The default depends on the plot’s scales, and the plot’s width if an aspectRatio is specified. For example, if the *y* scale is linear and there is no *fy* scale, it might be 396." + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "lengthBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "lengthClamp": { + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "lengthConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "lengthDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero. Radius scales have a default domain from 0 to the median first quartile of associated channels. Length have a default domain from 0 to the median median of associated channels. Opacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "lengthExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "lengthNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "lengthPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "lengthRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nLength scales have a default range of [0, 12]." + }, + "lengthScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *length* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The length scale defaults to *linear*, as this scale is intended for quantitative data." + }, + "lengthZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**. Otherwise, the default margins depend on the maximum margins of the plot’s marks. While most marks default to zero margins (because they are drawn inside the chart area), Plot’s axis marks have non-zero default margins." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bottom margin; the distance in pixels between the bottom edges of the inner and outer plot area. Defaults to the maximum bottom margin of the plot’s marks." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The left margin; the distance in pixels between the left edges of the inner and outer plot area. Defaults to the maximum left margin of the plot’s marks." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The right margin; the distance in pixels between the right edges of the inner and outer plot area. Defaults to the maximum right margin of the plot’s marks." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The top margin; the distance in pixels between the top edges of the inner and outer plot area. Defaults to the maximum top margin of the plot’s marks." + }, + "margins": { + "additionalProperties": false, + "description": "A shorthand object notation for setting multiple margin values. The object keys are margin names (top, right, etc).", + "properties": { + "bottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "left": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "right": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "top": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "name": { + "description": "A unique name for the plot. The name is used by standalone legend components to to lookup the plot and access scale mappings.", + "type": "string" + }, + "opacityBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "opacityClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "opacityConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "opacityDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nOpacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "opacityExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "opacityLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "opacityNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "opacityPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "opacityRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values).\n\nOpacity scales have a default range of [0, 1]." + }, + "opacityReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "opacityScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *opacity* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The opacity scale defaults to *linear*; this scales is intended for quantitative data." + }, + "opacityTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "opacityZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "padding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plot": { + "description": "An array of plot marks, interactors, or legends. Marks are graphical elements that make up plot layers. Unless otherwise configured, interactors will use the nearest previous mark as a basis for which data fields to select.", + "items": { + "anyOf": [ + { + "$ref": "#/definitions/PlotMark" + }, + { + "$ref": "#/definitions/PlotInteractor" + }, + { + "$ref": "#/definitions/PlotLegend" + } + ] + }, + "type": "array" + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "projectionClip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "const": "frame", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The projection’s clipping method; one of:\n\n- *frame* or true (default) - clip to the plot’s frame (including margins but not insets)\n- a number - clip to a circle of the given radius in degrees centered around the origin\n- null or false - do not clip\n\nSome projections (such as [*armadillo*][1] and [*berghaus*][2]) require spherical clipping: in that case set the marks’ **clip** option to\n*sphere*.\n\n[1]: https://observablehq.com/@d3/armadillo [2]: https://observablehq.com/@d3/berghaus-star" + }, + "projectionDomain": { + "anyOf": [ + { + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A GeoJSON object to fit to the plot’s frame (minus insets); defaults to a Sphere for spherical projections (outline of the the whole globe)." + }, + "projectionInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four projection insets. All insets typically default to zero, though not always. A positive inset reduces effective area, while a negative inset increases it." + }, + "projectionInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge of the projection by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "projectionInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge of the projection by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "projectionInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge of the projection by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "projectionInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge of the projection by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "projectionParallels": { + "anyOf": [ + { + "items": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y1" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y2" + } + ], + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [standard parallels][1]. For conic projections only.\n\n[1]: https://d3js.org/d3-geo/conic#conic_parallels" + }, + "projectionPrecision": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The projection’s [sampling threshold][1].\n\n[1]: https://d3js.org/d3-geo/projection#projection_precision" + }, + "projectionRotate": { + "anyOf": [ + { + "items": [ + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "x" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "y" + }, + { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "title": "z" + } + ], + "maxItems": 3, + "minItems": 3, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A rotation of the sphere before projection; defaults to [0, 0, 0]. Specified as Euler angles λ (yaw, or reference longitude), φ (pitch, or reference latitude), and optionally γ (roll), in degrees." + }, + "projectionType": { + "anyOf": [ + { + "$ref": "#/definitions/ProjectionName" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired projection; one of:\n\n- a named built-in projection such as *albers-usa*\n- null, for no projection\n\nNamed projections are scaled and translated to fit the **domain** to the plot’s frame (minus insets)." + }, + "rBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "rClamp": { + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "rConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "rDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nRadius scales have a default domain from 0 to the median first quartile of associated channels." + }, + "rExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "rLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value." + }, + "rNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "rPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "rRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nRadius scales have a default range of [0, 3]." + }, + "rScale": { + "anyOf": [ + { + "$ref": "#/definitions/ContinuousScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *r* (radius) scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. The radius scale defaults to *sqrt*; this scale is intended for quantitative data." + }, + "rZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "style": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/CSSStyles" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Custom styles to override Plot’s defaults. Styles may be specified either as a string of inline styles (*e.g.*, `\"color: red;\"`, in the same fashion as assigning [*element*.style][1]) or an object of properties (*e.g.*, `{color: \"red\"}`, in the same fashion as assigning [*element*.style properties][2]). Note that unitless numbers ([quirky lengths][3]) such as `{padding: 20}` may not supported by some browsers; you should instead specify a string with units such as `{padding: \"20px\"}`. By default, the returned plot has a max-width of 100%, and the system-ui font. Plot’s marks and axes default to [currentColor][4], meaning that they will inherit the surrounding content’s color.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/style [2]: https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleDeclaration [3]: https://www.w3.org/TR/css-values-4/#deprecated-quirky-length [4]: https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#currentcolor_keyword" + }, + "symbolDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. As symbol scales are discrete, the domain is an array (or iterable) of values is the desired order, defaulting to natural ascending order." + }, + "symbolRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For other ordinal data, such as for a *color* scale, it is an array (or iterable) of output values in the same order as the **domain**.\n\nSymbol scales have a default range of categorical symbols; the choice of symbols depends on whether the associated dot mark is filled or stroked." + }, + "symbolScale": { + "anyOf": [ + { + "$ref": "#/definitions/DiscreteScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *symbol* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled. Defaults to an *ordinal* scale type." + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The outer width of the plot in pixels, including margins. Defaults to 640. On Observable, this can be set to the built-in [width][1] for full-width responsive plots. Note: the default style has a max-width of 100%; the plot will automatically shrink to fit even when a fixed width is specified.\n\n[1]: https://github.com/observablehq/stdlib/blob/main/README.md#width" + }, + "xAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "xAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "xAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "xAxis": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *top* or\n*bottom* for *x*. Defaults to *bottom* for an *x* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*top* and *bottom* for *x*). If null, the implicit axis is suppressed." + }, + "xBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "xClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "xConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "xDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero. Radius scales have a default domain from 0 to the median first quartile of associated channels. Length have a default domain from 0 to the median median of associated channels. Opacity scales have a default domain from 0 to the maximum value of associated channels." + }, + "xExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "xFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "xGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "xInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "xInsetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "xInsetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "xLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "xLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "xLabelArrow": { + "anyOf": [ + { + "$ref": "#/definitions/LabelArrow" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the x-axis scale label. If *auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "xLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "xLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "xNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "xPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "xPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "xPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "xPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "xRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale." + }, + "xReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**." + }, + "xRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "xScale": { + "anyOf": [ + { + "$ref": "#/definitions/PositionScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *x* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, *categorical* for color scales, and otherwise *ordinal*. However, the radius scale defaults to *sqrt*, and the length and opacity scales default to *linear*; these scales are intended for quantitative data. The plot’s marks may also impose a scale type; for example, the barY mark requires that *x* is a *band* scale." + }, + "xTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "xTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "xTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "xTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "xTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "xTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "xZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + }, + "xyDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Set the *x* and *y* scale domains." + }, + "yAlign": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to distribute unused space in the **range** for *point* and *band* scales. A number in [0, 1], such as:\n\n- 0 - use the start of the range, putting unused space at the end\n- 0.5 (default) - use the middle, distributing unused space evenly\n- 1 use the end, putting unused space at the start\n\nFor ordinal position scales only." + }, + "yAriaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual description for the axis in the accessibility tree." + }, + "yAriaLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A short label representing the axis in the accessibility tree." + }, + "yAxis": { + "anyOf": [ + { + "const": "left", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "both", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the implicit axis: *left* or\n*right* for *y*. Defaults to *left* for a *y* scale.\n\nIf *both*, an implicit axis will be rendered on both sides of the plot (*left* and *right* for *y*). If null, the implicit axis is suppressed." + }, + "yBase": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A log scale’s base; defaults to 10. Does not affect the scale’s encoding, but rather the default ticks. For *log* scales only." + }, + "yClamp": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, values below the domain minimum are treated as the domain minimum, and values above the domain maximum are treated as the domain maximum.\n\nClamping is useful for focusing on a subset of the data while ensuring that extreme values remain visible, but use caution: clamped values may need an annotation to avoid misinterpretation. Clamping typically requires setting an explicit **domain** since if the domain is inferred, no values will be outside the domain.\n\nFor continuous scales only." + }, + "yConstant": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A symlog scale’s constant, expressing the magnitude of the linear region around the origin; defaults to 1. For *symlog* scales only." + }, + "yDomain": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s inputs (abstract values). By default inferred from channel values. For continuous data (numbers and dates), it is typically [*min*, *max*]; it can be [*max*, *min*] to reverse the scale. For ordinal data (strings or booleans), it is an array (or iterable) of values is the desired order, defaulting to natural ascending order.\n\nLinear scales have a default domain of [0, 1]. Log scales have a default domain of [1, 10] and cannot include zero." + }, + "yExponent": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A power scale’s exponent (*e.g.*, 0.5 for sqrt); defaults to 1 for a linear scale. For *pow* scales only." + }, + "yFontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The font-variant attribute for axis ticks; defaults to *tabular-nums* for quantitative axes." + }, + "yGrid": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to show a grid aligned with the scale’s ticks. If true, show a grid with the currentColor stroke; if a string, show a grid with the specified stroke color; if an approximate number of ticks, an interval, or an array of tick values, show corresponding grid lines. See also the grid mark.\n\nFor axes only." + }, + "yInset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "yInsetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "yInsetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "yLabel": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "yLabelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "yLabelArrow": { + "anyOf": [ + { + "$ref": "#/definitions/LabelArrow" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the x-axis scale label. If *auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "yLabelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "yLine": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, draw a line along the axis; if false (default), do not." + }, + "yNice": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, or a tick count or interval, extend the domain to nice round values. Defaults to 1, 2 or 5 times a power of 10 for *linear* scales, and nice time intervals for *utc* and *time* scales. Pass an interval such as\n*minute*, *wednesday* or *month* to specify what constitutes a nice interval.\n\nFor continuous scales only." + }, + "yPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For *band* scales, how much of the **range** to reserve to separate adjacent bands; defaults to 0.1 (10%). For *point* scales, the amount of inset for the first and last value as a proportion of the bandwidth; defaults to 0.5 (50%).\n\nFor ordinal position scales only." + }, + "yPaddingInner": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to separate adjacent bands." + }, + "yPaddingOuter": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "For a *band* scale, how much of the range to reserve to inset first and last bands." + }, + "yPercent": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, shorthand for a transform suitable for percentages, mapping proportions in [0, 1] to [0, 100]." + }, + "yRange": { + "anyOf": [ + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/Fixed" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The extent of the scale’s outputs (visual values). By default inferred from the scale’s **type** and **domain**, and for position scales, the plot’s dimensions. For continuous data (numbers and dates), and for ordinal position scales (*point* and *band*), it is typically [*min*,\n*max*]; it can be [*max*, *min*] to reverse the scale." + }, + "yReverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to reverse the scale’s encoding; equivalent to reversing either the\n**domain** or **range**. Note that by default, when the *y* scale is continuous, the *max* value points to the top of the screen, whereas ordinal values are ranked from top to bottom." + }, + "yRound": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round the output value to the nearest integer (pixel); useful for crisp edges when rendering.\n\nFor position scales only." + }, + "yScale": { + "anyOf": [ + { + "$ref": "#/definitions/PositionScaleType" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The *y* scale type, affecting how the scale encodes abstract data, say by applying a mathematical transformation. If null, the scale is disabled.\n\nFor quantitative data (numbers), defaults to *linear*; for temporal data (dates), defaults to *utc*; for ordinal data (strings or booleans), defaults to *point* for position scales, The plot’s marks may also impose a scale type; for example, the barY mark requires that *x* is a *band* scale." + }, + "yTickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "yTickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **yTickSize** and\n**yTickRotate**." + }, + "yTickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "yTickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "yTickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "yTicks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "yZero": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether the **domain** must include zero. If the domain minimum is positive, it will be set to zero; otherwise if the domain maximum is negative, it will be set to zero.\n\nFor quantitative scales only." + } + }, + "required": [ + "plot" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "area", + "description": "An area mark. The area mark is rarely used directly; it is only needed when the baseline and topline have neither *x* nor *y* values in common. Use areaY for a horizontal orientation where the baseline and topline share *x* values, or areaX for a vertical orientation where the baseline and topline share *y* values.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, representing the area’s baseline, typically bound to the *x* scale. For areaX, setting this option disables the implicit stackX transform." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often right) horizontal position channel, representing the area’s topline, typically bound to the *x* scale; if not specified, **x1** is used. For areaX, setting this option disables the implicit stackX transform." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, representing the area’s baseline, typically bound to the *y* scale. For areaY, setting this option disables the implicit stackY transform." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often top) vertical position channel, representing the area’s topline, typically bound to the *y* scale; if not specified, **y1** is used. For areaY, setting this option disables the implicit stackY transform." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "areaX", + "description": "A vertically-oriented area mark, where the baseline and topline share\n**y** values, as in a time-series area chart where time goes up↑.\n\nIf neither **x1** nor **x2** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero.\n\nIf an **interval** is specified, **y** values are binned accordingly, allowing zeroes for empty bins instead of interpolating across gaps. This is recommended to “regularize” sampled data; for example, if your data represents timestamped observations and you expect one observation per day, use *day* as the **interval**.\n\nVariable aesthetic channels are supported: if the **fill** is defined as a channel, the area will be broken into contiguous overlapping sections when the fill color changes; the fill color will apply to the interval spanning the current data point and the following data point. This behavior also applies to the **fillOpacity**, **stroke**, **strokeOpacity**,\n**strokeWidth**, **opacity**, **href**, **title**, and **ariaLabel** channels. When any of these channels are used, setting an explicit **z** channel (possibly to null) is strongly recommended.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position (or length) channel, typically bound to the *x* scale.\n\nIf neither **x1** nor **x2** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, representing the area’s baseline, typically bound to the *x* scale. For areaX, setting this option disables the implicit stackX transform." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often right) horizontal position channel, representing the area’s topline, typically bound to the *x* scale; if not specified, **x1** is used. For areaX, setting this option disables the implicit stackX transform." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "areaY", + "description": "A horizontally-oriented area mark, where the baseline and topline share\n**x** values, as in a time-series area chart where time goes right→.\n\nIf neither **y1** nor **y2** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero.\n\nIf an **interval** is specified, **x** values are binned accordingly, allowing zeroes for empty bins instead of interpolating across gaps. This is recommended to “regularize” sampled data; for example, if your data represents timestamped observations and you expect one observation per day, use *day* as the **interval**.\n\nVariable aesthetic channels are supported: if the **fill** is defined as a channel, the area will be broken into contiguous overlapping sections when the fill color changes; the fill color will apply to the interval spanning the current data point and the following data point. This behavior also applies to the **fillOpacity**, **stroke**, **strokeOpacity**,\n**strokeWidth**, **opacity**, **href**, **title**, and **ariaLabel** channels. When any of these channels are used, setting an explicit **z** channel (possibly to null) is strongly recommended.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position (or length) channel, typically bound to the *y* scale.\n\nIf neither **y1** nor **y2** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, representing the area’s baseline, typically bound to the *y* scale. For areaY, setting this option disables the implicit stackY transform." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional secondary (ending, often top) vertical position channel, representing the area’s topline, typically bound to the *y* scale; if not specified, **y1** is used. For areaY, setting this option disables the implicit stackY transform." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bend": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The angle, a constant in degrees, between the straight line intersecting the arrow’s two control points and the outgoing tangent direction of the arrow from the start point. The angle must be within ±90°; a positive angle will produce a clockwise curve, while a negative angle will produce a counterclockwise curve; zero (the default) will produce a straight line. Use true for 22.5°." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "headAngle": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How pointy the arrowhead is, in degrees; a constant typically between 0° and 180°, and defaults to 60°." + }, + "headLength": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the arrowhead relative to the **strokeWidth**; a constant. Assuming the default of stroke width 1.5px, this is the length of the arrowhead’s side in pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for **insetStart** and **insetEnd**." + }, + "insetEnd": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The ending inset, a constant in pixels; defaults to 0. A positive inset shortens the arrow by moving the ending point towards the starting point, while a negative inset extends it by moving the ending point in the opposite direction. A positive ending inset may be useful if the arrow points to a dot." + }, + "insetStart": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The starting inset, a constant in pixels; defaults to 0. A positive inset shortens the arrow by moving the starting point towards the endpoint point, while a negative inset extends it by moving the starting point in the opposite direction. A positive starting inset may be useful if the arrow emerges from a dot." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "arrow", + "description": "An arrow mark, drawing (possibly swoopy) arrows connecting pairs of points.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "sweep": { + "anyOf": [ + { + "type": "number" + }, + { + "const": "+x", + "type": "string" + }, + { + "const": "-x", + "type": "string" + }, + { + "const": "+y", + "type": "string" + }, + { + "const": "-y", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The sweep order; defaults to 1 indicating a positive (clockwise) bend angle; -1 indicates a negative (anticlockwise) bend angle; 0 effectively clears the bend angle. If set to *-x*, the bend angle is flipped when the ending point is to the left of the starting point — ensuring all arrows bulge up (down if bend is negative); if set to *-y*, the bend angle is flipped when the ending point is above the starting point — ensuring all arrows bulge right (left if bend is negative); the sign is negated for\n*+x* and *+y*." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position, for vertical arrows; typically bound to the *x* scale; shorthand for setting defaults for both **x1** and **x2**." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position; typically bound to the *x* scale; also sets a default for **x2**." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position; typically bound to the *x* scale; also sets a default for **x1**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position, for horizontal arrows; typically bound to the *y* scale; shorthand for setting defaults for both **y1** and **y2**." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position; typically bound to the *y* scale; also sets a default for **y2**." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position; typically bound to the *y* scale; also sets a default for **y1**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisX", + "description": "An axis mark to document the visual encoding of the horizontal position\n*x* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to tick values sampled from the *x* scale’s domain; if desired, use one of the **ticks**, **tickSpacing**, or **interval** options.\n\nThe **facetAnchor** option defaults to *bottom-empty* if **anchor** is\n*bottom*, and *top-empty* if **anchor** is *top*. The default margins likewise depend on **anchor** as follows; in order of **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *top* - 30, 20, 0, 20\n- *bottom* - 0, 20, 30, 20\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; use the\n**transform** *y*-scale option to show thousands or millions; or use the\n**textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisY", + "description": "An axis mark to document the visual encoding of the vertical position *y* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to tick values sampled from the *y* scale’s domain; if desired, use one of the\n**ticks**, **tickSpacing**, or **interval** options.\n\nThe **facetAnchor** option defaults to *right-empty* if **anchor** is\n*right*, and *left-empty* if **anchor** is *left*. The default margins likewise depend on **anchor** as follows; in order of **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *right* - 20, 40, 20, 0\n- *left* - 20, 0, 20, 40\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; or use the **textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisFx", + "description": "An axis mark to document the visual encoding of the horizontal facet position *fx* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to the *fx* scale’s domain; if desired, use one of the **ticks**,\n**tickSpacing**, or **interval** options.\n\nThe **facetAnchor** and **frameAnchor** options defaults to **anchor**. The default margins likewise depend on **anchor** as follows; in order of\n**marginTop**, **marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *top* - 30, 20, 0, 20\n- *bottom* - 0, 20, 30, 20\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; use the\n**transform** *y*-scale option to show thousands or millions; or use the\n**textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "label": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A textual label to show on the axis or legend; if null, show no label. By default the scale label is inferred from channel definitions, possibly with an arrow (↑, →, ↓, or ←) to indicate the direction of increasing value.\n\nFor axes and legends only." + }, + "labelAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "center", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Where to place the axis **label** relative to the plot’s frame. For vertical position scales (*y* and *fy*), may be *top*, *bottom*, or\n*center*; for horizontal position scales (*x* and *fx*), may be *left*,\n*right*, or *center*. Defaults to *center* for ordinal scales (including\n*fx* and *fy*), and otherwise *top* for *y*, and *right* for *x*." + }, + "labelArrow": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "up", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "down", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "const": true, + "type": "boolean" + }, + { + "const": false, + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to apply a directional arrow such as → or ↑ to the scale label. If\n*auto* (the default), the presence of the arrow depends on whether the scale is ordinal." + }, + "labelOffset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The axis **label** position offset (in pixels); default depends on margins and orientation." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "axisFy", + "description": "An axis mark to document the visual encoding of the vertical facet position *fy* scale, comprised of (up to) three marks: a vector for ticks, a text for tick labels, and another text for an axis label. The data defaults to the *fy* scale’s domain; if desired, use one of the **ticks**,\n**tickSpacing**, or **interval** options.\n\nThe **facetAnchor** option defaults to *right-empty* if **anchor** is\n*right*, and *left-empty* if **anchor** is *left*. The default margins likewise depend on **anchor** as follows; in order of **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**, in pixels:\n\n- *right* - 20, 40, 20, 0\n- *left* - 20, 0, 20, 40\n\nFor simplicity, and for consistent layout across plots, default axis margins are not affected by tick labels. If tick labels are too long, either increase the margin or shorten the labels: use the *k* SI-prefix tick format; or use the **textOverflow** and **lineWidth** options to clip.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textStroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tick text **stroke**, say for a *white* outline to improve legibility; defaults to null." + }, + "textStrokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeOpacity**; defaults to 1; has no effect unless **textStroke** is set." + }, + "textStrokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The tick text **strokeWidth**; defaults to 4; has no effect unless **textStroke** is set." + }, + "tickFormat": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to format inputs (abstract values) for axis tick labels; one of:\n\n- a [d3-format][1] string for numeric scales\n- a [d3-time-format][2] string for temporal scales\n\n[1]: https://d3js.org/d3-time [2]: https://d3js.org/d3-time-format" + }, + "tickPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between an axis tick mark and its associated text label (in pixels); often defaults to 3, but may be affected by **xTickSize** and\n**xTickRotate**." + }, + "tickRotate": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of axis tick labels in degrees clocksize; defaults to 0." + }, + "tickSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The length of axis tick marks in pixels; negative values extend in the opposite direction. Defaults to 6 for *x* and *y* axes and *color* and\n*opacity* *ramp* legends, and 0 for *fx* and *fy* axes." + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridX", + "description": "A horizontally-positioned ruleX mark (a vertical line, |) that renders a grid for the *x* scale. The data defaults to tick values sampled from the\n*x* scale’s domain; if desired, use one of the **ticks**, **tickSpacing**, or **interval** options.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridY", + "description": "A vertically-positioned ruleY mark (a horizontal line, —) that renders a grid for the *y* scale. The data defaults to tick values sampled from the\n*y* scale’s domain; if desired, use one of the **ticks**, **tickSpacing**, or **interval** options.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary horizontal position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often left) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often right) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the tick; an optional channel bound to the *y* scale. If not specified, the rule will be vertically centered in the plot’s frame." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridFx", + "description": "A horizontally-positioned ruleX mark (a vertical line, |) that renders a grid for the *fx* scale. The data defaults to the *fx* scale’s domain; if desired, use the **ticks** option.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The side of the frame on which to place the axis: *top* or *bottom* for horizontal axes (axisX and axisFx) and their associated vertical grids (gridX and gridFx), or *left* or *right* for vertical axes (axisY and axisFY) and their associated horizontal grids (gridY and gridFy).\n\nThe default **anchor** depends on the associated scale:\n\n- *x* - *bottom*\n- *y* - *left*\n- *fx* - *top* if there is a *bottom* *x* axis, and otherwise *bottom*\n- *fy* - *right* if there is a *left* *y* axis, and otherwise *right*\n\nFor grids, the **anchor** also affects the extent of grid lines when the opposite dimension is specified (**x** for gridY and **y** for gridX)." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "color": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A shorthand for setting both **fill** and **stroke**; affects the stroke of tick vectors and grid rules, and the fill of tick texts and axis label texts; defaults to *currentColor*." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Enforces uniformity for data at regular intervals, such as integer values or daily samples. The interval may be one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nThis option sets the internal transform to the given interval’s\n*interval*.floor function. In addition, the default **domain** will align with interval boundaries." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "gridFy", + "description": "A vertically-positioned ruleY mark (a horizontal line, —) that renders a grid for the *fy* scale. The data defaults to the *fy* scale’s domain; if desired, use the **ticks** option.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "A shorthand for setting both **fillOpacity** and **strokeOpacity**; affects the stroke opacity of tick vectors and grid rules, and the fill opacity of tick texts and axis label texts; defaults to 1 for axes and 0.1 for grids." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tickSpacing": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate spacing between adjacent axis ticks, affecting the default **ticks**; defaults to 80 pixels for *x* and *fx*, and 35 pixels for *y* and *fy*." + }, + "ticks": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/Interval" + }, + { + "items": {}, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The desired approximate number of axis ticks, or an explicit array of tick values, or an interval such as *day* or *month*." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary horizontal position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often left) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often right) horizontal position of the tick; a channel bound to the *x* scale.\n\nIf *x* represents ordinal values, use a tickY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the tick; an optional channel bound to the *y* scale. If not specified, the rule will be vertically centered in the plot’s frame." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "barX", + "description": "A horizontal bar mark. The required *x* values should be quantitative or temporal, and the optional *y* values should be ordinal.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero.\n\nThe optional **y** ordinal channel specifies the vertical position; it is typically bound to the *y* scale, which must be a *band* scale. If the\n**y** channel is not specified, the bar will span the vertical extent of the plot’s frame.\n\nIf *y* is quantitative, use the rectX mark instead. If *x* is ordinal, use the cell mark instead.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional vertical position of the bar; a ordinal channel typically bound to the *y* scale. If not specified, the bar spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a rectX mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "barY", + "description": "A vertical bar mark. The required *y* values should be quantitative or temporal, and the optional *x* values should be ordinal.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero.\n\nThe optional **x** ordinal channel specifies the horizontal position; it is typically bound to the *x* scale, which must be a *band* scale. If the\n**x** channel is not specified, the bar will span the horizontal extent of the plot’s frame.\n\nIf *x* is quantitative, use the rectY mark instead. If *y* is ordinal, use the cell mark instead.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional horizontal position of the bar; a ordinal channel typically bound to the *x* scale. If not specified, the bar spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a rectY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) horizontal position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "cell", + "description": "A rectangular cell mark. Along with **x** and/or **y**, a **fill** channel is typically specified to encode value as color.\n\nIf neither **x** nor **y** are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*,\n*x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n\nBoth **x** and **y** should be ordinal; if only **x** is quantitative (or temporal), use a barX mark; if only **y** is quantitative, use a barY mark; if both are quantitative, use a rect mark.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the cell; an optional ordinal channel typically bound to the *x* scale. If not specified, the cell spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a barX mark instead; if *y* is also quantitative or temporal, use a rect mark." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the cell; an optional ordinal channel typically bound to the *y* scale. If not specified, the cell spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a barY mark instead; if *x* is also quantitative or temporal, use a rect mark." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "cellX", + "description": "Like cell, but **x** defaults to the zero-based index [0, 1, 2, …], and if\n**stroke** is not a channel, **fill** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the cell; an optional ordinal channel typically bound to the *x* scale. If not specified, the cell spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a barX mark instead; if *y* is also quantitative or temporal, use a rect mark." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the cell; an optional ordinal channel typically bound to the *y* scale. If not specified, the cell spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a barY mark instead; if *x* is also quantitative or temporal, use a rect mark." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "cellY", + "description": "Like cell, but **y** defaults to the zero-based index [0, 1, 2, …], and if\n**stroke** is not a channel, **fill** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the cell; an optional ordinal channel typically bound to the *x* scale. If not specified, the cell spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a barX mark instead; if *y* is also quantitative or temporal, use a rect mark." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the cell; an optional ordinal channel typically bound to the *y* scale. If not specified, the cell spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a barY mark instead; if *x* is also quantitative or temporal, use a rect mark." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "contour", + "description": "A contour mark that draws isolines to delineate regions above and below a particular continuous value. It is often used to convey densities as a height field. The special column name \"density\" can be used to map density values to the fill or stroke options.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "thresholds": { + "anyOf": [ + { + "type": "number" + }, + { + "items": { + "type": "number" + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of contour thresholds to subdivide the domain into discrete level sets; defaults to 10. One of:\n\n- a count representing the desired number of bins\n- an array of *n* threshold values for *n* - 1 bins" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "delaunayLink", + "description": "A mark that draws links for each edge of the Delaunay triangulation of points given by the **x** and **y** channels. Like the link mark, except that **x1**, **y1**, **x2**, and **y2** are derived automatically from **x** and **y**. When an aesthetic channel is specified (such as\n**stroke** or **strokeWidth**), the link inherits the corresponding channel value from one of its two endpoints arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Delaunay triangulation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "delaunayMesh", + "description": "A mark that draws a mesh of the Delaunay triangulation of the points given by the **x** and **y** channels. The **stroke** option defaults to _currentColor_, and the **strokeOpacity** defaults to 0.2; the **fill** option is not supported. When an aesthetic channel is specified (such as\n**stroke** or **strokeWidth**), the mesh inherits the corresponding channel value from one of its constituent points arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Delaunay triangulation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hull", + "description": "A mark that draws a convex hull around the points given by the **x** and\n**y** channels. The **stroke** option defaults to _currentColor_ and the\n**fill** option defaults to _none_. When an aesthetic channel is specified (such as **stroke** or **strokeWidth**), the hull inherits the corresponding channel value from one of its constituent points arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate hull for each group. If **z** is not specified, it defaults to the **fill** channel, if any, or the **stroke** channel, if any.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "voronoi", + "description": "A mark that draws polygons for each cell of the Voronoi tesselation of the points given by the **x** and **y** channels.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Voronoi tesselation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "voronoiMesh", + "description": "A mark that draws a mesh for the cell boundaries of the Voronoi tesselation of the points given by the **x** and **y** channels. The\n**stroke** option defaults to _currentColor_, and the **strokeOpacity** defaults to 0.2. The **fill** option is not supported. When an aesthetic channel is specified (such as **stroke** or **strokeWidth**), the mesh inherits the corresponding channel value from one of its constituent points arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Voronoi tesselation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "denseLine", + "description": "A denseLine mark that plots line densities rather than point densities. The mark forms a binned raster grid and \"draws\" straight lines into it. To avoid over-weighting steep lines, by default each drawn series is normalized on a per-column basis to approximate arc length normalization. The values for each series are aggregated to form the line density, which is then drawn as an image similar to the raster mark.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Flag to perform approximate arc length normalization of line segments to prevent artifacts due to overcounting steep lines. Defaults to `true`." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "A ordinal channel for grouping data into series to be drawn as separate lines." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "density", + "description": "A 2D density mark that shows smoothed point cloud densities along two dimensions. The mark bins the data, counts the number of records that fall into each bin, and smooths the resulting counts, then plots the smoothed distribution, by default using a circular dot mark. The density mark calculates density values that can be mapped to encoding channels such as fill or r using the special field name \"density\".\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "anyOf": [ + { + "const": "dot", + "type": "string" + }, + { + "const": "circle", + "type": "string" + }, + { + "const": "hexagon", + "type": "string" + }, + { + "const": "cell", + "type": "string" + }, + { + "const": "text", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The basic mark type to use to render 2D density values. Defaults to a dot mark; cell and text marks are also supported." + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stack": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Flag indicating if densities should be stacked. Defaults to false." + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "areaX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "lineX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "dotX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityX", + "description": "A densityX mark that visualizes smoothed point cloud densities along the\n**x** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaX mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "textX", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaX mark; lineX, dotX, and textX marks are also supported.", + "type": "string" + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stack": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Flag indicating if densities should be stacked. Defaults to false." + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "areaY", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate areas; defaults to **fill** if a channel, or\n**stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "const": "lineY", + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "enum": [ + "dot", + "dotY", + "circle", + "hexagon" + ], + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels. Defaults to 20." + }, + "bins": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of bins over which to discretize the data prior to smoothing. Defaults to 1024." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "densityY", + "description": "A densityY mark that visualizes smoothed point cloud densities along the\n**y** dimension. The mark bins the data, counts the number of records that fall into each bin, smooths the resulting counts, and then plots the smoothed distribution, by default using an areaY mark.\n\nSet the *type* property to use a different base mark type.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "normalize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "const": "max", + "type": "string" + }, + { + "const": "sum", + "type": "string" + }, + { + "const": "none", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Normalization method for density estimates. If `false` or `'none'` (the default), the density estimates are smoothed weighted counts. If `true` or `'sum'`, density estimates are divided by the sum of the total point mass. If `'max'`, estimates are divided by the maximum smoothed value." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "description": "The basic mark type to use to render 1D density values. Defaults to an areaY mark; lineY, dot, and text marks are also supported.", + "enum": [ + "text", + "textY" + ], + "type": "string" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark", + "type" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "dot", + "description": "A dot mark that draws circles, or other symbols, as in a scatterplot.\n\nIf either **x** or **y** is not specified, the default is determined by the\n**frameAnchor** option. If none of **x**, **y**, and **frameAnchor** are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*,\n*y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].\n\nDots are sorted by descending radius **r** by default to mitigate overplotting; set the **sort** option to null to draw them in input order.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "An interval (such as *day* or a number), to transform **y** values to the middle of the interval." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "dotX", + "description": "Like dot, except that **x** defaults to the identity function, assuming that\n*data* = [*x₀*, *x₁*, *x₂*, …].\n\nIf an **interval** is specified, such as *day*, **y** is transformed to the middle of the interval.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position of the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "An interval (such as *day* or a number), to transform **x** values to the middle of the interval." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "dotY", + "description": "Like dot, except that **y** defaults to the identity function, assuming that\n*data* = [*y₀*, *y₁*, *y₂*, …].\n\nIf an **interval** is specified, such as *day*, **x** is transformed to the middle of the interval.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position of the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "circle", + "description": "Like dot, except that the **symbol** option is set to *circle*.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hexagon", + "description": "Like dot, except that the **symbol** option is set to *hexagon*.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "ci": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The confidence interval in (0, 1); defaults to 0.95." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "errorbarX", + "description": "A mark that draws error bars for a calculated parametric confidence interval for a dependent variable (*x*), potentially grouped by an independent variable (*y*).\n\nThis mark aggregates raw values to produce a [parametric confidence interval][1] of the mean, assuming a normal distribution. To instead visualize pre-computeted interval values or custom aggregations, use a **ruleY** mark with specified **x1** and **x2** channels.\n\nMultiple error bars can be produced by specifying a **z** or **stroke** channel. Set the **marker** option to `'tick'` to add small perpendicular lines at the start and end of the error interval.\n\n[1]: https://en.wikipedia.org/wiki/Normal_distribution#Confidence_intervals", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The dependent variable horizontal position channel, typically bound to the\n*x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The independent variable vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data, producing an independent error bar for each group. If not specified, it defaults to **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "x" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "ci": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The confidence interval in (0, 1); defaults to 0.95." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "errorbarY", + "description": "A mark that draws error bars for a calculated parametric confidence interval for a dependent variable (*y*), potentially grouped by an independent variable (*x*).\n\nThis mark aggregates raw values to produce a [parametric confidence interval][1] of the mean, assuming a normal distribution. To instead visualize pre-computeted interval values or custom aggregations, use a **ruleX** mark with specified **y1** and **y2** channels.\n\nMultiple error bars can be produced by specifying a **z** or **stroke** channel. Set the **marker** option to `'tick'` to add small perpendicular lines at the start and end of the error interval.\n\n[1]: https://en.wikipedia.org/wiki/Normal_distribution#Confidence_intervals", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The independent variable horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The dependent variable vertical position channel, typically bound to the\n*y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data, producing an independent error bar for each group. If not specified, it defaults to **stroke** if a channel." + } + }, + "required": [ + "data", + "mark", + "y" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If null (default), the rectangular outline of the frame is drawn; otherwise the frame is drawn as a line only on the given side, and the\n**rx**, **ry**, **fill**, and **fillOpacity** options are ignored." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "frame", + "description": "Draws a rectangle around the plot’s frame, or if an **anchor** is given, a line on the given side. Useful for visual separation of facets, or in conjunction with axes and grids to fill the frame’s background.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "geometry": { + "$ref": "#/definitions/ChannelValue", + "description": "A required channel for the geometry to render; defaults to identity, assuming *data* is a GeoJSON object or an iterable of GeoJSON objects." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "geo", + "description": "A geo mark. The **geometry** channel, which defaults to the identity function assuming that *data* is a GeoJSON object or an iterable of GeoJSON objects, is projected to the plane using the plot’s top-level\n**projection**.\n\nIf *data* is a GeoJSON feature collection, then the mark’s data is\n*data*.features; if *data* is a GeoJSON geometry collection, then the mark’s data is *data*.geometries; if *data* is some other GeoJSON object, then the mark’s data is the single-element array [*data*].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of Point and MultiPoint geometries, defaulting to a constant 3 pixels. If **r** is a number, it is interpreted as a constant radius in pixels; otherwise it is interpreted as a channel and the effective radius is controlled by the *r* scale, which defaults to a *sqrt* scale such that the visual area of a point is proportional to its associated value.\n\nIf **r** is a channel, geometries will be sorted by descending radius by default, to limit occlusion; use the **sort** transform to control render order. Geometries with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "graticule", + "description": "A geo mark whose *data* is a 10° global graticule. (For use with a spherical **projection** only.)", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "sphere", + "description": "A geo mark whose *data* is the outline of the sphere on the projection’s plane. (For use with a spherical **projection** only.)", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "binWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between centers of neighboring hexagons, in pixels; defaults to 20. If also using a hexgrid mark, use matching **binWidth** values." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for dots distributed horizontally at the top of the frame:\n\n```js Plot.dot(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hexbin", + "description": "A hexbin mark that bins **x** and **y** data into a hexagonal grid and visualizes aggregate functions per bin (e.g., count for binned density). Aggregate functions can be used for fill, stroke, or r (radius) options.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The radius of dots; either a channel or constant. When a number, it is interpreted as a constant radius in pixels. Otherwise it is interpreted as a channel, typically bound to the *r* channel, which defaults to the *sqrt* type for proportional symbols. The radius defaults to 4.5 pixels when using the **symbol** channel, and otherwise 3 pixels. Dots with a nonpositive radius are not drawn." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle of dots in degrees clockwise; either a channel or a constant. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel. Defaults to 0°, pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "symbol": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/SymbolType" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The categorical symbol; either a channel or a constant. A constant symbol can be specified by a valid symbol name such as *star*, or a symbol object (implementing the draw method); otherwise it is interpreted as a channel. Defaults to *circle* for the **dot** mark, and *hexagon* for the\n**hexagon** mark.\n\nIf the **symbol** channel’s values are all symbols, symbol names, or nullish, the channel is unscaled (values are interpreted literally); otherwise, the channel is bound to the *symbol* scale." + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "type": { + "anyOf": [ + { + "const": "dot", + "type": "string" + }, + { + "const": "circle", + "type": "string" + }, + { + "const": "hexagon", + "type": "string" + }, + { + "const": "text", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The basic mark type to use for hex-binned values. Defaults to a hexagon mark; dot and text marks are also supported." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the dot’s center, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the dot’s center, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "How to subdivide bins. If not specified, defaults to the *fill* channel, if any, or the *stroke* channel, if any. If null, bins will not be subdivided." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "binWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance between centers of neighboring hexagons, in pixels; defaults to 20. Should match the **binWidth** of the hexbin mark." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "hexgrid", + "description": "The hexgrid decoration mark complements the hexbin mark, showing the outlines of all hexagons spanning the frame with a default **stroke** of\n*currentColor* and a default **strokeOpacity** of 0.1, similar to the default axis grids.\n\nNote that the **binWidth** option of the hexgrid mark should match that of the hexbin transform. The grid is clipped by the frame. This is a stroke-only mark, and **fill** is not supported; to fill the frame, use the frame mark.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "crossOrigin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [cross-origin][1] behavior. See the [Plot.image notebook][2] for details.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/crossorigin [2]: https://observablehq.com/@observablehq/plot-image" + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image height in pixels. When a number, it is interpreted as a constant radius in pixels; otherwise it is interpreted as a channel. Also sets the default **height**; if neither are set, defaults to 16. Images with a nonpositive height are not drawn." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "image", + "description": "An image mark that draws images as in a scatterplot.\n\nIf either **x** or **y** is not specified, the default is determined by the **frameAnchor** option. If none of **x**, **y**, and **frameAnchor** are specified, *data* is assumed to be an array of pairs [[*x₀*, *y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …] such that **x** = [*x₀*, *x₁*, *x₂*, …] and **y** = [*y₀*, *y₁*, *y₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "preserveAspectRatio": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image [aspect ratio][1]; defaults to *xMidYMid meet*. To crop the image instead of scaling it to fit, use *xMidYMid slice*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio" + }, + "r": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image clip radius, for circular images. If null (default), images are not clipped; when a number, it is interpreted as a constant in pixels; otherwise it is interpreted as a channel, typically bound to the *r* scale. Also defaults **height** and **width** to twice its value." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle, in degrees clockwise. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "src": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The required image URL (or relative path). If a string that starts with a dot, slash, or URL protocol (*e.g.*, “https:”) it is assumed to be a constant; otherwise it is interpreted as a channel." + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image width in pixels. When a number, it is interpreted as a constant radius in pixels; otherwise it is interpreted as a channel. Also sets the default **height**; if neither are set, defaults to 16. Images with a nonpositive width are not drawn." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the image’s center; typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the image’s center; typically bound to the *y* scale." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "line", + "description": "A line mark that connects control points.\n\nPoints along the line are connected in input order. If there are multiple series via the **z**, **fill**, or **stroke** channel, series are drawn in input order such that the last series is drawn on top. Typically *data* is already in sorted order, such as chronological for time series; if needed, consider a **sort** transform.\n\nIf any **x** or **y** values are invalid (undefined, null, or NaN), the line will be interrupted, resulting in a break that divides the line shape into multiple segments. If a line segment consists of only a single point, it may appear invisible unless rendered with rounded or square line caps. In addition, some curves such as *cardinal-open* only render a visible segment if it contains multiple points.\n\nVariable aesthetic channels are supported: if the **stroke** is defined as a channel, the line will be broken into contiguous overlapping segments when the stroke color changes; the stroke color will apply to the interval spanning the current data point and the following data point. This behavior also applies to the **fill**, **fillOpacity**, **strokeOpacity**,\n**strokeWidth**, **opacity**, **href**, **title**, and **ariaLabel** channels. When any of these channels are used, setting an explicit **z** channel (possibly to null) is strongly recommended.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "lineX", + "description": "Like line, except that **x** defaults to the identity function assuming that *data* = [*x₀*, *x₁*, *x₂*, …] and **y** defaults to the zero-based index [0, 1, 2, …].", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "lineY", + "description": "Like line, except **y** defaults to the identity function and assumes that *data* = [*y₀*, *y₁*, *y₂*, …] and **x** defaults to the zero-based index [0, 1, 2, …].", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series to be drawn as separate lines. If not specified, it defaults to\n**fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "curve": { + "anyOf": [ + { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "const": "auto", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*\n- *auto* (default) - like *linear*, but use the (possibly spherical) projection, if any\n\nThe *auto* curve is typically used in conjunction with a spherical projection to interpolate along geodesics." + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points.\n\nSince a link has exactly two points, only the following curves (or a custom curve) are recommended: *linear*, *step*, *step-after*, *step-before*,\n*bump-x*, or *bump-y*. Note that the *linear* curve is incapable of showing a fill since a straight line has zero area. For a curved link, use an arrow mark with the **bend** option.\n\nIf the plot uses a spherical **projection**, the default *auto* **curve** will render links as geodesics; to draw a straight line instead, use the\n*linear* **curve**." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "link", + "description": "A link mark, drawing line segments (curves) connecting pairs of points.\n\nIf the plot uses a spherical **projection**, the default *auto* **curve** will render links as geodesics; to draw a straight line instead, use the\n*linear* **curve**.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position, for vertical links; typically bound to the *x* scale; shorthand for setting defaults for both **x1** and **x2**." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position; typically bound to the *x* scale; also sets a default for **x2**." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position; typically bound to the *x* scale; also sets a default for **x1**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position, for horizontal links; typically bound to the *y* scale; shorthand for setting defaults for both **y1** and **y2**." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position; typically bound to the *y* scale; also sets a default for **y2**." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position; typically bound to the *y* scale; also sets a default for **y1**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "raster", + "description": "A raster mark which renders a raster image from spatial samples. It represents discrete samples in abstract coordinates **x** and **y**; the **fill** and **fillOpacity** channels specify further abstract values (_e.g._, height in a topographic map) to be spatially interpolated to produce an image.\n\nThe **x** and **y** data domains are binned into the cells (\"pixels\") of a raster grid, typically with an aggregate function evaluated over the binned data. The result can be optionally smoothed (blurred).\n\nTo create a smoothed density heatmap, use the heatmap mark, which is a raster mark with different default options.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "heatmap", + "description": "Like raster, but with default options for accurate density estimation via smoothing. The *bandwidth* (20), *interpolate* (\"linear\"), and\n*pixelSize* (2) options are set to produce smoothed density heatmaps.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "bandwidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The kernel density bandwidth for smoothing, in pixels." + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The fill, typically bound to the *color* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to pixel colors. Use an aggregate expression to instead visualize an aggregate value per raster bin. If fill is set to a constant color or to a non-aggregate field, opacity will be used to convey densities. If a non-aggregate (group by) field is provided, multiple rasters are created with a unique categorical color per layer." + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The opacity, typically bound to the *opacity* scale. Can be specified as a constant or a channel based on the input data. Use the special value `\"density\"` to map computed density values to opacity. Use an aggregate expression to instead visualize an aggregate value per raster bin." + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "height": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The height (number of rows) of the grid, in actual pixels." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "imageRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [image-rendering attribute][1]; defaults to *auto* (bilinear). The option may be set to *pixelated* to disable bilinear interpolation for a sharper image; however, note that this is not supported in WebKit.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/image-rendering" + }, + "interpolate": { + "anyOf": [ + { + "$ref": "#/definitions/GridInterpolate" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The spatial interpolation method; one of:\n\n- *none* - do not perform interpolation (the default), maps samples to single bins\n- *linear* - apply proportional linear interpolation across adjacent bins\n- *nearest* - assign each pixel to the closest sample’s value (Voronoi diagram)\n- *barycentric* - apply barycentric interpolation over the Delaunay triangulation\n- *random-walk* - apply a random walk from each pixel, stopping when near a sample" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rasterTile", + "description": "An experimental raster mark which performs tiling and prefetching to support more scalable rasters upon panning the domain. Uses a tile size that matches with current width and height, and prefetches data from neighboring tile segments.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "origin": { + "anyOf": [ + { + "items": { + "type": "number" + }, + "maxItems": 2, + "minItems": 2, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The coordinates of the tile origin in the **x** and **y** data domains. Defaults to [0, 0]." + }, + "pad": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The bin padding, one of 1 (default) to include extra padding for the final bin, or 0 to make the bins flush with the maximum domain value." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "pixelSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The effective screen size of a raster pixel, used to determine the height and width of the raster from the frame’s dimensions; defaults to 1." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The width (number of columns) of the grid, in actual pixels." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale. Domain values are binned into a grid with *width* horizontal bins." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale. Domain values are binned into a grid with *height* vertical bins." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for rectY, **y** for rectX, or both for rect) into an interval (**x1** and **x2** for rectY, or **y1** and\n**y2** for rectX, or both for rect); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for rectX, or stackY for rectY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rect", + "description": "A rect mark. The rectangle extends horizontally from **x1** to **x2**, and vertically from **y1** to **y2**. The position channels are often derived with a transform.\n\nWhen **y** extends from zero, for example for a histogram where the height of each rect reflects a count of values, use the rectY mark for an implicit stackY transform; similarly, if **x** extends from zero, use the rectX mark for an implicit stackX transform.\n\nIf an **interval** is specified, then **x1** and **x2** are derived from\n**x**, and **y1** and **y2** are derived from **y**, each representing the lower and upper bound of the containing interval, respectively.\n\nBoth *x* and *y* should be quantitative or temporal; otherwise, use a bar or cell mark.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf an **interval** is specified, then **x1** and **x2** are derived from\n**x**, representing the lower and upper bound of the containing interval, respectively. For example, for a vertical bar chart of items sold by day:\n\n```js Plot.rectY(sales, {x: \"date\", interval: \"day\", y2: \"items\"}) ```\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf an **interval** is specified, then **y1** and **y2** are derived from\n**y**, representing the lower and upper bound of the containing interval, respectively. For example, for a horizontal bar chart of items sold by day:\n\n```js Plot.rectX(sales, {y: \"date\", interval: \"day\", x2: \"items\"}) ```\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for rectY, **y** for rectX, or both for rect) into an interval (**x1** and **x2** for rectY, or **y1** and\n**y2** for rectX, or both for rect); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for rectX, or stackY for rectY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rectX", + "description": "Like rect, but if neither **x1** nor **x2** is specified, an implicit stackX transform is applied to **x**, and if **x** is not specified, it defaults to the identity function, assuming that *data* is an array of numbers [*x₀*, *x₁*, *x₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf neither **x1** nor **x2** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf an **interval** is specified, then **y1** and **y2** are derived from\n**y**, representing the lower and upper bound of the containing interval, respectively. For example, for a horizontal bar chart of items sold by day:\n\n```js Plot.rectX(sales, {y: \"date\", interval: \"day\", x2: \"items\"}) ```\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for rectY, **y** for rectX, or both for rect) into an interval (**x1** and **x2** for rectY, or **y1** and\n**y2** for rectX, or both for rect); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for rectX, or stackY for rectY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "rectY", + "description": "Like rect, but if neither **y1** nor **y2** is specified, apply an implicit stackY transform is applied to **y**, and if **y** is not specified, it defaults to the identity function, assuming that *data* is an array of numbers [*y₀*, *y₁*, *y₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf an **interval** is specified, then **x1** and **x2** are derived from\n**x**, representing the lower and upper bound of the containing interval, respectively. For example, for a vertical bar chart of items sold by day:\n\n```js Plot.rectY(sales, {x: \"date\", interval: \"day\", y2: \"items\"}) ```\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the rectX mark’s implicit stackX transform.\n\nIf *x* represents ordinal values, use a bar or cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf neither **y1** nor **y2** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) vertical position channel, typically bound to the *y* scale. Setting this option disables the rectY mark’s implicit stackY transform.\n\nIf *y* represents ordinal values, use a bar or cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "ci": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The confidence interval in (0, 1), or 0 to hide bands; defaults to 0.95." + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "regressionY", + "description": "A mark that draws [linear regression][1] lines with confidence bands, representing the estimated relation of a dependent variable (*y*) on an independent variable (*x*).\n\nThe linear regression line is fit using the [least squares][2] approach. See Torben Jansen’s [“Linear regression with confidence bands”][3] and [this StatExchange question][4] for details on the confidence interval calculation.\n\nMultiple regressions can be produced by specifying a **z**, **fill**, or\n**stroke** channel.\n\n[1]: https://en.wikipedia.org/wiki/Linear_regression [2]: https://en.wikipedia.org/wiki/Least_squares [3]: https://observablehq.com/@toja/linear-regression-with-confidence-bands [4]: https://stats.stackexchange.com/questions/101318/understanding-shape-and-calculation-of-confidence-bands-in-linear-regression", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "precision": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The distance in pixels between samples of the confidence band; defaults to 4." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The independent variable horizontal position channel, typically bound to the *x* scale; defaults to the zero-based index of the data [0, 1, 2, …]." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The dependent variable vertical position channel, typically bound to the\n*y* scale; defaults to identity, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into (possibly stacked) series, producing an independent regression for each group. If not specified, it defaults to **fill** if a channel, or **stroke** if a channel." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**y** for ruleX, or **x** for ruleY) into an interval (**y1** and **y2** for ruleX, or **x1** and **x2** for ruleY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "ruleX", + "description": "A horizontally-positioned ruleX mark (a vertical line, |). The **x** channel specifies the rule’s horizontal position and defaults to identity, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]; the optional **y1** and\n**y2** channels specify its vertical extent.\n\nThe ruleX mark is often used to highlight specific *x* values. If *y* represents ordinal values, use a tickX mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**y** for ruleX, or **x** for ruleY) into an interval (**y1** and **y2** for ruleX, or **x1** and **x2** for ruleY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "ruleY", + "description": "A vertically-positioned ruleY mark (a horizontal line, —). The **y** channel specifies the rule's vertical position and defaults to identity, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]; the optional **x1** and\n**x2** channels specify its horizontal extent.\n\nThe ruleY mark is often used to highlight specific *y* values. If *x* represents ordinal values, use a tickY mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the tick; an optional channel bound to the *x* scale. If not specified, the rule will be horizontally centered in the plot’s frame." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "Shorthand for specifying both the primary and secondary vertical position of the tick as the bounds of the containing interval; can only be used in conjunction with the **interval** option." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The primary (starting, often bottom) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The secondary (ending, often top) vertical position of the tick; a channel bound to the *y* scale.\n\nIf *y* represents ordinal values, use a tickX mark instead." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "text", + "description": "A text mark. The **text** channel specifies the textual contents of the mark, which may be preformatted with line breaks (\\n, \\r\\n, or \\r), or wrapped or clipped using the **lineWidth** and **textOverflow** options.\n\nIf **text** contains numbers or dates, a default formatter will be applied, and the **fontVariant** will default to *tabular-nums* instead of *normal*. If **text** is not specified, it defaults to the identity function for primitive data (such as numbers, dates, and strings), and to the zero-based index [0, 1, 2, …] for objects (so that something identifying is visible by default).\n\nIf either **x** or **y** is not specified, the default is determined by the **frameAnchor** option.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "An interval (such as *day* or a number), to transform **y** values to the middle of the interval." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "textX", + "description": "Like text, but **x** defaults to the identity function, assuming that\n*data* = [*x₀*, *x₁*, *x₂*, …]. If an **interval** is specified, such as\n*day*, **y** is transformed to the middle of the interval.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position of the text’s anchor point, typically bound to the\n*y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "$ref": "#/definitions/Interval", + "description": "An interval (such as *day* or a number), to transform **x** values to the middle of the interval." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "textY", + "description": "Like text, but **y** defaults to the identity function, assuming that\n*data* = [*y₀*, *y₁*, *y₂*, …]. If an **interval** is specified, such as\n*day*, **x** is transformed to the middle of the interval.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position of the text’s anchor point, typically bound to the\n*x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "tickX", + "description": "A horizontally-positioned tickX mark (a vertical line, |). The **x** channel specifies the tick’s horizontal position and defaults to identity, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]; the optional **y** ordinal channel specifies its vertical position.\n\nIf *y* represents quantitative or temporal values, use a ruleX mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required horizontal position of the tick; a channel typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional vertical position of the tick; an ordinal channel typically bound to the *y* scale. If not specified, the tick spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a ruleX mark instead." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "tickY", + "description": "A vertically-positioned tickY mark (a horizontal line, —). The **y** channel specifies the tick's vertical position and defaults to identity, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]; the optional **x** ordinal channel specifies its horizontal position.\n\nIf *x* represents quantitative or temporal values, use a ruleY mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional horizontal position of the tick; an ordinal channel typically bound to the *x* scale. If not specified, the tick spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a ruleY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required vertical position of the tick; a channel typically bound to the *y* scale." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "vector", + "description": "A vector mark.\n\nIf none of **frameAnchor**, **x**, and **y** are specified, then **x** and\n**y** default to accessors assuming that *data* contains tuples [[*x₀*,\n*y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …]", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "vectorX", + "description": "Like vector, but **x** instead defaults to the identity function and **y** defaults to null, assuming that *data* is an array of numbers [*x₀*, *x₁*,\n*x₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "vectorY", + "description": "Like vector, but **y** instead defaults to the identity function and **x** defaults to null, assuming that *data* is an array of numbers [*y₀*, *y₁*,\n*y₂*, …].", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "spike", + "description": "Like vector, but with default *options* suitable for drawing a spike map.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "gap": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The gap in pixels between cells; defaults to 1." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "waffleX", + "description": "A horizontal waffle mark. The required *x* values should be quantitative, and the optional *y* values should be ordinal.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero.\n\nThe optional **y** ordinal channel specifies the vertical position; it is typically bound to the *y* scale, which must be a *band* scale. If the\n**y** channel is not specified, the bar will span the vertical extent of the plot’s frame. Because a waffle represents a discrete number of square cells, it may not use all of the available bandwidth.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "multiple": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of cells per row or column; defaults to undefined for automatic." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "round": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round to integers to avoid partial cells." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "unit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The quantity each cell represents; defaults to 1." + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional vertical position of the bar; a ordinal channel typically bound to the *y* scale. If not specified, the bar spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a rectX mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "gap": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The gap in pixels between cells; defaults to 1." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "waffleY", + "description": "A vertical waffle mark. The required *y* values should be quantitative, and the optional *x* values should be ordinal.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero.\n\nThe optional **x** ordinal channel specifies the horizontal position; it is typically bound to the *x* scale, which must be a *band* scale. If the\n**x** channel is not specified, the bar will span the horizontal extent of the plot’s frame. Because a waffle represents a discrete number of square cells, it may not use all of the available bandwidth.", + "type": "string" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "multiple": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of cells per row or column; defaults to undefined for automatic." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "round": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round to integers to avoid partial cells." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "unit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The quantity each cell represents; defaults to 1." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional horizontal position of the bar; a ordinal channel typically bound to the *x* scale. If not specified, the bar spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a rectY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) horizontal position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + { + "additionalProperties": false, + "properties": { + "$schema": { + "description": "A [JSON schema](http://json-schema.org/) URL for this specification, such as https://uwdata.github.io/mosaic/schema/latest.json. This property enables validation and autocomplete in editors with JSON schema support.", + "format": "uri", + "type": "string" + }, + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. If specified, the legend is interactive, using a `toggle` interaction for discrete legends or an `intervalX` interaction for continuous legends." + }, + "columns": { + "description": "The number of columns to use to layout a discrete legend.", + "type": "number" + }, + "config": { + "$ref": "#/definitions/Config", + "description": "Configuration options." + }, + "data": { + "$ref": "#/definitions/Data", + "description": "Dataset definitions." + }, + "field": { + "description": "The data field over which to generate output selection clauses. If unspecified, a matching field is retrieved from existing plot marks.", + "type": "string" + }, + "for": { + "description": "The name of the plot this legend applies to. A plot must include a `name` attribute to be referenced.", + "type": "string" + }, + "height": { + "description": "The height of a continuous legend, in pixels.", + "type": "number" + }, + "label": { + "description": "The legend label.", + "type": "string" + }, + "legend": { + "description": "A legend of the given type. The valid types are `\"color\"`, `\"opacity\"`, and `\"symbol\"`.", + "enum": [ + "color", + "opacity", + "symbol" + ], + "type": "string" + }, + "marginBottom": { + "description": "The bottom margin of the legend component, in pixels.", + "type": "number" + }, + "marginLeft": { + "description": "The left margin of the legend component, in pixels.", + "type": "number" + }, + "marginRight": { + "description": "The right margin of the legend component, in pixels.", + "type": "number" + }, + "marginTop": { + "description": "The top margin of the legend component, in pixels.", + "type": "number" + }, + "meta": { + "$ref": "#/definitions/Meta", + "description": "Specification metadata." + }, + "params": { + "$ref": "#/definitions/Params", + "description": "Param and Selection definitions." + }, + "plotDefaults": { + "$ref": "#/definitions/PlotAttributes", + "description": "A default set of attributes to apply to all plot components." + }, + "tickSize": { + "description": "The size of legend ticks in a continuous legend, in pixels.", + "type": "number" + }, + "width": { + "description": "The width of a continuous legend, in pixels.", + "type": "number" + } + }, + "required": [ + "for", + "legend" + ], + "type": "object" + } + ], + "description": "A declarative Mosaic specification." + }, + "Sphere": { + "additionalProperties": false, + "description": "The sphere mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "sphere", + "description": "A geo mark whose *data* is the outline of the sphere on the projection’s plane. (For use with a spherical **projection** only.)", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "Spike": { + "additionalProperties": false, + "description": "The spike mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "spike", + "description": "Like vector, but with default *options* suitable for drawing a spike map.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "StackOffset": { + "$ref": "#/definitions/StackOffsetName", + "description": "A stack offset method; one of:\n\n- *normalize* - rescale each stack to fill [0, 1]\n- *center* - align the centers of all stacks\n- *wiggle* - translate stacks to minimize apparent movement\n\nIf a given stack has zero total value, the *normalize* offset will not adjust the stack’s position. Both the *center* and *wiggle* offsets ensure that the lowest element across stacks starts at zero for better default axes. The\n*wiggle* offset is recommended for streamgraphs in conjunction with the\n*inside-out* order. For more, see [Byron & Wattenberg][1].\n\n[1]: https://leebyron.com/streamgraph/" + }, + "StackOffsetName": { + "description": "A built-in stack offset method; one of:\n\n- *normalize* - rescale each stack to fill [0, 1]\n- *center* - align the centers of all stacks\n- *wiggle* - translate stacks to minimize apparent movement\n\nIf a given stack has zero total value, the *normalize* offset will not adjust the stack’s position. Both the *center* and *wiggle* offsets ensure that the lowest element across stacks starts at zero for better default axes. The\n*wiggle* offset is recommended for streamgraphs in conjunction with the\n*inside-out* order. For more, see [Byron & Wattenberg][1].\n\n[1]: https://leebyron.com/streamgraph/", + "enum": [ + "center", + "normalize", + "wiggle" + ], + "type": "string" + }, + "StackOrder": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrderName" + }, + { + "const": "-value", + "type": "string" + }, + { + "const": "-x", + "type": "string" + }, + { + "const": "-y", + "type": "string" + }, + { + "const": "-z", + "type": "string" + }, + { + "const": "-sum", + "type": "string" + }, + { + "const": "-appearance", + "type": "string" + }, + { + "const": "-inside-out", + "type": "string" + }, + { + "type": "string" + }, + { + "items": {}, + "type": "array" + } + ], + "description": "How to order layers prior to stacking; one of:\n\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order" + }, + "StackOrderName": { + "description": "The built-in stack order methods; one of:\n\n- *x* - alias of *value*; for stackX only\n- *y* - alias of *value*; for stackY only\n- *value* - ascending value (or descending with **reverse**)\n- *sum* - total value per series\n- *appearance* - position of maximum value per series\n- *inside-out* (default with *wiggle*) - order the earliest-appearing series on the inside\n\nThe *inside-out* order is recommended for streamgraphs in conjunction with the *wiggle* offset. For more, see [Byron & Wattenberg][1].\n\n[1]: https://leebyron.com/streamgraph/", + "enum": [ + "value", + "x", + "y", + "z", + "sum", + "appearance", + "inside-out" + ], + "type": "string" + }, + "Stddev": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stddev": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the sum of the given column." + } + }, + "required": [ + "stddev" + ], + "type": "object" + }, + "StddevPop": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stddevPop": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the sum of the given column." + } + }, + "required": [ + "stddevPop" + ], + "type": "object" + }, + "Sum": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "sum": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the sum of the given column." + } + }, + "required": [ + "sum" + ], + "type": "object" + }, + "SymbolType": { + "description": "The built-in symbol implementations. For fill, one of:\n\n- *circle* - a circle\n- *cross* - a Greek cross with arms of equal length\n- *diamond* - a rhombus\n- *square* - a square\n- *star* - a pentagonal star (pentagram)\n- *triangle* - an up-pointing triangle\n- *wye* - a Y with arms of equal length\n\nFor stroke (based on [Heman Robinson’s research][1]), one of:\n\n- *circle* - a circle\n- *plus* - a plus sign\n- *times* - an X with arms of equal length\n- *triangle2* - an (alternate) up-pointing triangle\n- *asterisk* - an asterisk\n- *square2* - a (alternate) square\n- *diamond2* - a rotated square\n\nThe *hexagon* symbol is also supported.\n\n[1]: https://www.tandfonline.com/doi/abs/10.1080/10618600.2019.1637746", + "enum": [ + "asterisk", + "circle", + "cross", + "diamond", + "diamond2", + "hexagon", + "plus", + "square", + "square2", + "star", + "times", + "triangle", + "triangle2", + "wye" + ], + "type": "string" + }, + "Table": { + "additionalProperties": false, + "description": "A table grid view component.", + "properties": { + "align": { + "additionalProperties": { + "enum": [ + "left", + "right", + "center", + "justify" + ], + "type": "string" + }, + "description": "An object of per-column alignment values. Column names should be object keys, which map to alignment values. Valid alignment values are: `\"left\"`, `\"right\"`, `\"center\"`, and `\"justify\"`. By default, numbers are right-aligned and other values are left-aligned.", + "type": "object" + }, + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A selection clause is added for each currently selected table row." + }, + "columns": { + "description": "A list of column names to include in the table grid. If unspecified, all table columns are included.", + "items": { + "type": "string" + }, + "type": "array" + }, + "filterBy": { + "$ref": "#/definitions/ParamRef", + "description": "A selection to filter the database table indicated by the `from` property." + }, + "from": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The name of a database table to use as a data source for this widget." + }, + "height": { + "description": "The height of the table widget, in pixels.", + "type": "number" + }, + "input": { + "const": "table", + "description": "A table grid widget.", + "type": "string" + }, + "maxWidth": { + "description": "The maximum width of the table widget, in pixels.", + "type": "number" + }, + "rowBatch": { + "description": "The number of rows load in a new batch upon table scroll.", + "type": "number" + }, + "width": { + "anyOf": [ + { + "type": "number" + }, + { + "additionalProperties": { + "type": "number" + }, + "type": "object" + } + ], + "description": "If a number, sets the total width of the table widget, in pixels. If an object, provides per-column pixel width values. Column names should be object keys, mapped to numeric width values." + } + }, + "required": [ + "input", + "from" + ], + "type": "object" + }, + "Text": { + "additionalProperties": false, + "description": "The text mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "text", + "description": "A text mark. The **text** channel specifies the textual contents of the mark, which may be preformatted with line breaks (\\n, \\r\\n, or \\r), or wrapped or clipped using the **lineWidth** and **textOverflow** options.\n\nIf **text** contains numbers or dates, a default formatter will be applied, and the **fontVariant** will default to *tabular-nums* instead of *normal*. If **text** is not specified, it defaults to the identity function for primitive data (such as numbers, dates, and strings), and to the zero-based index [0, 1, 2, …] for objects (so that something identifying is visible by default).\n\nIf either **x** or **y** is not specified, the default is determined by the **frameAnchor** option.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "TextX": { + "additionalProperties": false, + "description": "The textX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "An interval (such as *day* or a number), to transform **y** values to the middle of the interval." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "textX", + "description": "Like text, but **x** defaults to the identity function, assuming that\n*data* = [*x₀*, *x₁*, *x₂*, …]. If an **interval** is specified, such as\n*day*, **y** is transformed to the middle of the interval.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the text’s anchor point, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position of the text’s anchor point, typically bound to the\n*y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "TextY": { + "additionalProperties": false, + "description": "The textY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y**, along with\n**textAnchor** and **lineAnchor**, based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*, *bottom-left*), or the\n*middle* of the frame." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "interval": { + "$ref": "#/definitions/Interval", + "description": "An interval (such as *day* or a number), to transform **x** values to the middle of the interval." + }, + "lineAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line anchor controls how text is aligned (typically vertically) relative to its anchor point; it is one of *top*, *bottom*, or *middle*. If the frame anchor is *top*, *top-left*, or *top-right*, the default line anchor is *top*; if the frame anchor is *bottom*, *bottom-right*, or\n*bottom-left*, the default is *bottom*; otherwise it is *middle*." + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "textY", + "description": "Like text, but **y** defaults to the identity function, assuming that\n*data* = [*y₀*, *y₁*, *y₂*, …]. If an **interval** is specified, such as\n*day*, **x** is transformed to the middle of the interval.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rotation angle in degrees clockwise; a constant or a channel; defaults to 0°. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "text": { + "$ref": "#/definitions/ChannelValue", + "description": "The text contents channel, possibly with line breaks (\\n, \\r\\n, or \\r). If not specified, defaults to the zero-based index [0, 1, 2, …]." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position of the text’s anchor point, typically bound to the\n*x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the text’s anchor point, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping data into series." + } + }, + "required": [ + "mark" + ], + "type": "object" + }, + "TickX": { + "additionalProperties": false, + "description": "The tickX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "tickX", + "description": "A horizontally-positioned tickX mark (a vertical line, |). The **x** channel specifies the tick’s horizontal position and defaults to identity, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]; the optional **y** ordinal channel specifies its vertical position.\n\nIf *y* represents quantitative or temporal values, use a ruleX mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required horizontal position of the tick; a channel typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional vertical position of the tick; an ordinal channel typically bound to the *y* scale. If not specified, the tick spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a ruleX mark instead." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "TickY": { + "additionalProperties": false, + "description": "The tickY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "tickY", + "description": "A vertically-positioned tickY mark (a horizontal line, —). The **y** channel specifies the tick's vertical position and defaults to identity, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]; the optional **x** ordinal channel specifies its horizontal position.\n\nIf *x* represents quantitative or temporal values, use a ruleY mark instead.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional horizontal position of the tick; an ordinal channel typically bound to the *x* scale. If not specified, the tick spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a ruleY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required vertical position of the tick; a channel typically bound to the *y* scale." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "TimeIntervalName": { + "description": "The built-in time intervals; UTC or local time, depending on context. The\n*week* interval is an alias for *sunday*. The *quarter* interval is every three months, and the *half* interval is every six months, aligned at the start of the year.", + "enum": [ + "second", + "minute", + "hour", + "day", + "week", + "month", + "quarter", + "half", + "year", + "monday", + "tuesday", + "wednesday", + "thursday", + "friday", + "saturday", + "sunday" + ], + "type": "string" + }, + "TipPointer": { + "description": "The pointer mode for the tip; corresponds to pointerX, pointerY, and pointer.", + "enum": [ + "x", + "y", + "xy" + ], + "type": "string" + }, + "Toggle": { + "additionalProperties": false, + "description": "A toggle interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `(field = value1) OR (field = value2) ...` is added for the currently selected values." + }, + "channels": { + "description": "The encoding channels over which to select values. For a selected mark, selection clauses will cover the backing data fields for each channel.", + "items": { + "type": "string" + }, + "type": "array" + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "select": { + "const": "toggle", + "description": "Select individal values.", + "type": "string" + } + }, + "required": [ + "as", + "channels", + "select" + ], + "type": "object" + }, + "ToggleColor": { + "additionalProperties": false, + "description": "A toggleColor interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `(field = value1) OR (field = value2) ...` is added for the currently selected values." + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "select": { + "const": "toggleColor", + "description": "Select individal values in the `color` scale domain. Clicking or touching a mark toggles its selection status.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "ToggleX": { + "additionalProperties": false, + "description": "A toggleX interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `(field = value1) OR (field = value2) ...` is added for the currently selected values." + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "select": { + "const": "toggleX", + "description": "Select individal values in the `x` scale domain. Clicking or touching a mark toggles its selection status.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "ToggleY": { + "additionalProperties": false, + "description": "A toggleY interactor.", + "properties": { + "as": { + "$ref": "#/definitions/ParamRef", + "description": "The output selection. A clause of the form `(field = value1) OR (field = value2) ...` is added for the currently selected values." + }, + "peers": { + "description": "A flag indicating if peer (sibling) marks are excluded when cross-filtering (default `true`). If set, peer marks will not be filtered by this interactor's selection in cross-filtering setups.", + "type": "boolean" + }, + "select": { + "const": "toggleY", + "description": "Select individal values in the `y` scale domain. Clicking or touching a mark toggles its selection status.", + "type": "string" + } + }, + "required": [ + "as", + "select" + ], + "type": "object" + }, + "Transform": { + "anyOf": [ + { + "$ref": "#/definitions/ColumnTransform" + }, + { + "$ref": "#/definitions/AggregateTransform" + }, + { + "$ref": "#/definitions/WindowTransform" + } + ], + "description": "A data transform." + }, + "TransformField": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A field argument to a data transform." + }, + "VConcat": { + "additionalProperties": false, + "description": "A vconcat component.", + "properties": { + "vconcat": { + "description": "Vertically concatenate components in a column layout.", + "items": { + "$ref": "#/definitions/Component" + }, + "type": "array" + } + }, + "required": [ + "vconcat" + ], + "type": "object" + }, + "VSpace": { + "additionalProperties": false, + "description": "A vspace component.", + "properties": { + "vspace": { + "description": "Vertical space to place between components. Number values indicate screen pixels. String values may use CSS units (em, pt, px, etc).", + "type": [ + "number", + "string" + ] + } + }, + "required": [ + "vspace" + ], + "type": "object" + }, + "VarPop": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "varPop": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the population variance of the given column." + } + }, + "required": [ + "varPop" + ], + "type": "object" + }, + "Variance": { + "additionalProperties": false, + "properties": { + "distinct": { + "type": "boolean" + }, + "orderby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "partitionby": { + "anyOf": [ + { + "$ref": "#/definitions/TransformField" + }, + { + "items": { + "$ref": "#/definitions/TransformField" + }, + "type": "array" + } + ] + }, + "range": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rows": { + "anyOf": [ + { + "items": { + "type": [ + "number", + "null" + ] + }, + "type": "array" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "variance": { + "anyOf": [ + { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + { + "items": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A transform argument." + }, + "maxItems": 1, + "minItems": 1, + "type": "array" + } + ], + "description": "Compute the sample variance of the given column." + } + }, + "required": [ + "variance" + ], + "type": "object" + }, + "Vector": { + "additionalProperties": false, + "description": "The vector mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "vector", + "description": "A vector mark.\n\nIf none of **frameAnchor**, **x**, and **y** are specified, then **x** and\n**y** default to accessors assuming that *data* contains tuples [[*x₀*,\n*y₀*], [*x₁*, *y₁*], [*x₂*, *y₂*], …]", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "VectorShape": { + "$ref": "#/definitions/VectorShapeName", + "description": "How to draw a vector: either a named shape or a custom implementation." + }, + "VectorShapeName": { + "description": "The built-in vector shape implementations; one of:\n\n- *arrow* - a straight line with an open arrowhead at the end (↑)\n- *spike* - an isosceles triangle with a flat base (▲)", + "enum": [ + "arrow", + "spike" + ], + "type": "string" + }, + "VectorX": { + "additionalProperties": false, + "description": "The vectorX mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "vectorX", + "description": "Like vector, but **x** instead defaults to the identity function and **y** defaults to null, assuming that *data* is an array of numbers [*x₀*, *x₁*,\n*x₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "VectorY": { + "additionalProperties": false, + "description": "The vectorY mark.", + "properties": { + "anchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s position along its orientation relative to its anchor point; a constant. Assuming a default **rotate** angle of 0°, one of:\n\n- *start* - from [*x*, *y*] to [*x*, *y* - *l*]\n- *middle* (default) - from [*x*, *y* + *l* / 2] to [*x*, *y* - *l* / 2]\n- *end* - from [*x*, *y* + *l*] to [*x*, *y*]\n\nwhere [*x*, *y*] is the vector’s anchor point and *l* is the vector’s (possibly scaled) length in pixels." + }, + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector’s frame anchor, to default **x** and **y** relative to the frame; a constant representing one of the frame corners (*top-left*,\n*top-right*, *bottom-right*, *bottom-left*), sides (*top*, *right*,\n*bottom*, *left*), or *middle* (default). Has no effect if both **x** and **y** are specified." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "length": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vector’s length; either an optional channel bound to the *length* scale or a constant number in pixels. Defaults to 12 pixels." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "vectorY", + "description": "Like vector, but **y** instead defaults to the identity function and **x** defaults to null, assuming that *data* is an array of numbers [*y₀*, *y₁*,\n*y₂*, …].", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "r": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vector shape’s radius, such as half the width of the *arrow*’s head or the *spike*’s base; a constant number in pixels. Defaults to 3.5 pixels." + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "rotate": { + "$ref": "#/definitions/ChannelValue", + "description": "The vector’s orientation (rotation angle); either a constant number in degrees clockwise, or an optional channel (with no associated scale). Defaults to 0 degrees with the vector pointing up." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shape": { + "anyOf": [ + { + "$ref": "#/definitions/VectorShape" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The shape of the vector; a constant. Defaults to *arrow*." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position of the vector’s anchor point; an optional channel bound to the *x* scale. Default depends on the **frameAnchor**." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position of the vector’s anchor point; an optional channel bound to the *y* scale. Default depends on the **frameAnchor**." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "Voronoi": { + "additionalProperties": false, + "description": "The voronoi mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "voronoi", + "description": "A mark that draws polygons for each cell of the Voronoi tesselation of the points given by the **x** and **y** channels.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Voronoi tesselation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "VoronoiMesh": { + "additionalProperties": false, + "description": "The voronoiMesh mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "curve": { + "anyOf": [ + { + "$ref": "#/definitions/Curve" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The curve (interpolation) method for connecting adjacent points. One of:\n\n- *basis* - a cubic basis spline (repeating the end points)\n- *basis-open* - an open cubic basis spline\n- *basis-closed* - a closed cubic basis spline\n- *bump-x* - a Bézier curve with horizontal tangents\n- *bump-y* - a Bézier curve with vertical tangents\n- *bundle* - a straightened cubic basis spline (suitable for lines only, not areas)\n- *cardinal* - a cubic cardinal spline (with one-sided differences at the ends)\n- *cardinal-open* - an open cubic cardinal spline\n- *cardinal-closed* - an closed cubic cardinal spline\n- *catmull-rom* - a cubic Catmull–Rom spline (with one-sided differences at the ends)\n- *catmull-rom-open* - an open cubic Catmull–Rom spline\n- *catmull-rom-closed* - a closed cubic Catmull–Rom spline\n- *linear* - a piecewise linear curve (*i.e.*, straight line segments)\n- *linear-closed* - a closed piecewise linear curve (*i.e.*, straight line segments)\n- *monotone-x* - a cubic spline that preserves monotonicity in *x*\n- *monotone-y* - a cubic spline that preserves monotonicity in *y*\n- *natural* - a natural cubic spline\n- *step* - a piecewise constant function where *y* changes at the midpoint of *x*\n- *step-after* - a piecewise constant function where *y* changes after *x*\n- *step-before* - a piecewise constant function where *x* changes after *y*" + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "voronoiMesh", + "description": "A mark that draws a mesh for the cell boundaries of the Voronoi tesselation of the points given by the **x** and **y** channels. The\n**stroke** option defaults to _currentColor_, and the **strokeOpacity** defaults to 0.2. The **fill** option is not supported. When an aesthetic channel is specified (such as **stroke** or **strokeWidth**), the mesh inherits the corresponding channel value from one of its constituent points arbitrarily.\n\nIf **z** is specified, the input points are grouped by *z*, producing a separate Voronoi tesselation for each group.", + "type": "string" + }, + "marker": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for markerStart, markerMid, and markerEnd; one of:\n\n- a marker name such as *arrow* or *circle*\n- *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerEnd": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the ending point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "markerMid": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for any middle (interior) points of a line segment. If the line segment only has a start and end point, this option has no effect. One of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*\n* a function - a custom marker function; see below" + }, + "markerStart": { + "anyOf": [ + { + "$ref": "#/definitions/MarkerName" + }, + { + "const": "none", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The marker for the starting point of a line segment; one of:\n\n- a marker name such as *arrow* or *circle*\n* *none* (default) - no marker\n* true - alias for *circle-fill*\n* false or null - alias for *none*" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tension": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tension option only has an effect on bundle, cardinal and Catmull–Rom splines (*bundle*, *cardinal*, *cardinal-open*, *cardinal-closed*,\n*catmull-rom*, *catmull-rom-open*, and *catmull-rom-closed*). For bundle splines, it corresponds to [beta][1]; for cardinal splines, [tension][2]; for Catmull–Rom splines, [alpha][3].\n\n[1]: https://d3js.org/d3-shape/curve#curveBundle_beta [2]: https://d3js.org/d3-shape/curve#curveCardinal_tension [3]: https://d3js.org/d3-shape/curve#curveCatmullRom_alpha" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel, typically bound to the *y* scale." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "An optional ordinal channel for grouping to produce multiple (possibly overlapping) triangulations." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "WaffleX": { + "additionalProperties": false, + "description": "The waffleX mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "gap": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The gap in pixels between cells; defaults to 1." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "waffleX", + "description": "A horizontal waffle mark. The required *x* values should be quantitative, and the optional *y* values should be ordinal.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero.\n\nThe optional **y** ordinal channel specifies the vertical position; it is typically bound to the *y* scale, which must be a *band* scale. If the\n**y** channel is not specified, the bar will span the vertical extent of the plot’s frame. Because a waffle represents a discrete number of square cells, it may not use all of the available bandwidth.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "multiple": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of cells per row or column; defaults to undefined for automatic." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "round": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round to integers to avoid partial cells." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "unit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The quantity each cell represents; defaults to 1." + }, + "x": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The horizontal position (or length/width) channel, typically bound to the\n*x* scale.\n\nIf neither **x1** nor **x2** nor **interval** is specified, an implicit stackX transform is applied and **x** defaults to the identity function, assuming that *data* = [*x₀*, *x₁*, *x₂*, …]. Otherwise if an **interval** is specified, then **x1** and **x2** are derived from **x**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **x1** or **x2** is specified, the other defaults to **x**, which defaults to zero." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often left) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often right) horizontal position channel, typically bound to the *x* scale. Setting this option disables the implicit stackX transform.\n\nIf *x* represents ordinal values, use a cell mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional vertical position of the bar; a ordinal channel typically bound to the *y* scale. If not specified, the bar spans the vertical extent of the frame; otherwise the *y* scale must be a *band* scale.\n\nIf *y* represents quantitative or temporal values, use a rectX mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "WaffleY": { + "additionalProperties": false, + "description": "The waffleY mark.", + "properties": { + "ariaDescription": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-description][1]; a constant textual description.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-description" + }, + "ariaHidden": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [aria-hidden][1] state; a constant indicating whether the element is exposed to an accessibility API.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-hidden" + }, + "ariaLabel": { + "$ref": "#/definitions/ChannelValue", + "description": "The [aria-label][1]; a channel specifying short textual labels representing the value in the accessibility tree.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-label" + }, + "channels": { + "additionalProperties": { + "type": "string" + }, + "description": "Additional named channels, for example to include in a tooltip. Consists of (channel name, data field name) key-value pairs.", + "type": "object" + }, + "clip": { + "anyOf": [ + { + "const": "frame", + "type": "string" + }, + { + "const": "sphere", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to clip the mark; one of:\n\n- *frame* or true - clip to the plot’s frame (inner area)\n- *sphere* - clip to the projected sphere (*e.g.*, front hemisphere)\n- null or false - do not clip\n\nThe *sphere* clip option requires a geographic projection." + }, + "data": { + "$ref": "#/definitions/PlotMarkData", + "description": "The data source for the mark." + }, + "dx": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The horizontal offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "dy": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The vertical offset in pixels; a constant option. On low-density screens, an additional 0.5px offset may be applied for crisp edges." + }, + "facet": { + "anyOf": [ + { + "const": "auto", + "type": "string" + }, + { + "const": "include", + "type": "string" + }, + { + "const": "exclude", + "type": "string" + }, + { + "const": "super", + "type": "string" + }, + { + "type": "boolean" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to enable or disable faceting; one of:\n\n- *auto* (default) - automatically determine if this mark should be faceted\n- *include* (or true) - draw the subset of the mark’s data in the current facet\n- *exclude* - draw the subset of the mark’s data *not* in the current facet\n- *super* - draw this mark in a single frame that covers all facets\n- null (or false) - repeat this mark’s data across all facets (*i.e.*, no faceting)\n\nWhen a mark uses *super* faceting, it is not allowed to use position scales (*x*, *y*, *fx*, or *fy*); *super* faceting is intended for decorations, such as labels and legends.\n\nWhen top-level faceting is used, the default *auto* setting is equivalent to *include* when the mark data is strictly equal to the top-level facet data; otherwise it is equivalent to null. When the *include* or *exclude* facet mode is chosen, the mark data must be parallel to the top-level facet data: the data must have the same length and order. If the data are not parallel, then the wrong data may be shown in each facet. The default\n*auto* therefore requires strict equality (`===`) for safety, and using the facet data as mark data is recommended when using the *exclude* facet mode. (To construct parallel data safely, consider using [*array*.map][1] on the facet data.)\n\nWhen mark-level faceting is used, the default *auto* setting is equivalent to *include*: the mark will be faceted if either the **fx** or **fy** channel option (or both) is specified. The null or false option will disable faceting, while *exclude* draws the subset of the mark’s data *not* in the current facet.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map" + }, + "facetAnchor": { + "anyOf": [ + { + "const": "top", + "type": "string" + }, + { + "const": "right", + "type": "string" + }, + { + "const": "bottom", + "type": "string" + }, + { + "const": "left", + "type": "string" + }, + { + "const": "top-left", + "type": "string" + }, + { + "const": "top-right", + "type": "string" + }, + { + "const": "bottom-left", + "type": "string" + }, + { + "const": "bottom-right", + "type": "string" + }, + { + "const": "top-empty", + "type": "string" + }, + { + "const": "right-empty", + "type": "string" + }, + { + "const": "bottom-empty", + "type": "string" + }, + { + "const": "left-empty", + "type": "string" + }, + { + "const": "empty", + "type": "string" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to place the mark with respect to facets; one of:\n\n- null (default for most marks) - display the mark in each non-empty facet\n- *top*, *right*, *bottom*, or *left* - display the mark only in facets on the given side\n- *top-empty*, *right-empty*, *bottom-empty*, or *left-empty* (default for axis marks) - display the mark only in facets that have empty space on the given side: either the margin, or an empty facet\n- *empty* - display the mark in empty facets only" + }, + "fill": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill" + }, + "fillOpacity": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [fill-opacity][1]; a constant number between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/fill-opacity" + }, + "filter": { + "$ref": "#/definitions/ChannelValue", + "description": "Applies a transform to filter the mark’s index according to the given channel values; only truthy values are retained.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "fx": { + "$ref": "#/definitions/ChannelValue", + "description": "The horizontal facet position channel, for mark-level faceting, bound to the *fx* scale." + }, + "fy": { + "$ref": "#/definitions/ChannelValue", + "description": "The vertical facet position channel, for mark-level faceting, bound to the\n*fy* scale." + }, + "gap": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The gap in pixels between cells; defaults to 1." + }, + "href": { + "$ref": "#/definitions/ChannelValue", + "description": "The [href][1]; a channel specifying URLs for clickable links. May be used in conjunction with the **target** option to open links in another window.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/href" + }, + "imageFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "A CSS [filter][1]; a constant string used to adjust the rendering of images, such as *blur(5px)*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/filter" + }, + "inset": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four insets: **insetTop**,\n**insetRight**, **insetBottom**, and **insetLeft**. All insets typically default to zero, though not always (say when using bin transform). A positive inset reduces effective area, while a negative inset increases it." + }, + "insetBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the bottom edge by the specified number of pixels. A positive value insets towards the top edge (reducing effective area), while a negative value insets away from the top edge (increasing it)." + }, + "insetLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the left edge by the specified number of pixels. A positive value insets towards the right edge (reducing effective area), while a negative value insets away from the right edge (increasing it)." + }, + "insetRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the right edge by the specified number of pixels. A positive value insets towards the left edge (reducing effective area), while a negative value insets away from the left edge (increasing it)." + }, + "insetTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Insets the top edge by the specified number of pixels. A positive value insets towards the bottom edge (reducing effective area), while a negative value insets away from the bottom edge (increasing it)." + }, + "interval": { + "anyOf": [ + { + "$ref": "#/definitions/Interval" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How to convert a continuous value (**x** for barX, or **y** for barY) into an interval (**x1** and **x2** for barX, or **y1** and **y2** for barY); one of:\n\n- a named time interval such as *day* (for date intervals)\n- a number (for number intervals), defining intervals at integer multiples of *n*\n\nSetting this option disables the implicit stack transform (stackX for barX, or stackY for barY)." + }, + "margin": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Shorthand to set the same default for all four mark margins: **marginTop**,\n**marginRight**, **marginBottom**, and **marginLeft**; typically defaults to 0, except for axis marks." + }, + "marginBottom": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s bottom margin; the minimum distance in pixels between the bottom edges of the inner and outer plot area." + }, + "marginLeft": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s left margin; the minimum distance in pixels between the left edges of the inner and outer plot area." + }, + "marginRight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s right margin; the minimum distance in pixels between the right edges of the mark’s inner and outer plot area." + }, + "marginTop": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The mark’s top margin; the minimum distance in pixels between the top edges of the inner and outer plot area." + }, + "mark": { + "const": "waffleY", + "description": "A vertical waffle mark. The required *y* values should be quantitative, and the optional *x* values should be ordinal.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero.\n\nThe optional **x** ordinal channel specifies the horizontal position; it is typically bound to the *x* scale, which must be a *band* scale. If the\n**x** channel is not specified, the bar will span the horizontal extent of the plot’s frame. Because a waffle represents a discrete number of square cells, it may not use all of the available bandwidth.", + "type": "string" + }, + "mixBlendMode": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [mix-blend-mode][1]; a constant string specifying how to blend content such as *multiply*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/mix-blend-mode" + }, + "multiple": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The number of cells per row or column; defaults to undefined for automatic." + }, + "offset": { + "anyOf": [ + { + "$ref": "#/definitions/StackOffset" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "After stacking, an optional **offset** can be applied to translate and scale stacks, say to produce a streamgraph; defaults to null for a zero baseline (**y** = 0 for stackY, and **x** = 0 for stackX). If the *wiggle* offset is used, the default **order** changes to *inside-out*." + }, + "opacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally. For faster rendering, prefer the **strokeOpacity** or **fillOpacity** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/opacity" + }, + "order": { + "anyOf": [ + { + "$ref": "#/definitions/StackOrder" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The order in which stacks are layered; one of:\n\n- null (default) for input order\n- a named stack order method such as *inside-out* or *sum*\n- a field name, for natural order of the corresponding values\n- a function of data, for natural order of the corresponding values\n- an array of explicit **z** values in the desired order\n\nIf the *wiggle* **offset** is used, as for a streamgraph, the default changes to *inside-out*." + }, + "paintOrder": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [paint-order][1]; a constant string specifying the order in which the\n**fill**, **stroke**, and any markers are drawn; defaults to *normal*, which draws the fill, then stroke, then markers; defaults to *stroke* for the text mark to create a “halo” around text to improve legibility.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/paint-order" + }, + "pointerEvents": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [pointer-events][1] property; a constant string such as *none*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/pointer-events" + }, + "reverse": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Applies a transform to reverse the order of the mark’s index, say for reverse input order." + }, + "round": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, round to integers to avoid partial cells." + }, + "rx": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*x*-radius][1], either in pixels or as a percentage of the rect width. If **rx** is not specified, it defaults to **ry** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/rx" + }, + "ry": { + "anyOf": [ + { + "type": "number" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The rounded corner [*y*-radius][1], either in pixels or as a percentage of the rect height. If **ry** is not specified, it defaults to **rx** if present, and otherwise draws square corners.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/ry" + }, + "select": { + "$ref": "#/definitions/SelectFilter", + "description": "Applies a filter transform after data is loaded to highlight selected values only. For example, `first` and `last` select the first or last values of series only (using the *z* channel to separate series). Meanwhile, `nearestX` and `nearestY` select the point nearest to the pointer along the *x* or *y* channel dimension. Unlike Mosaic selections, a mark level *select* is internal to the mark only, and does not populate a param or selection value to be shared across clients.\n\nNote that filtering only affects the rendered mark index, not the associated channel values, and has no effect on imputed scale domains." + }, + "shapeRendering": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [shape-rendering][1]; a constant string such as *crispEdges*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/shape-rendering" + }, + "sort": { + "anyOf": [ + { + "$ref": "#/definitions/SortOrder" + }, + { + "$ref": "#/definitions/ChannelDomainSort" + } + ], + "description": "Either applies a transform to sort the mark’s index by the specified channel values, or imputes ordinal scale domains from this mark’s channels.\n\nWhen imputing ordinal scale domains from channel values, the **sort** option is an object whose keys are ordinal scale names such as *x* or *fx*, and whose values are channel names such as *y*, *y1*, or *y2*. For example, to impute the *y* scale’s domain from the associated *x* channel values in ascending order:\n\n```js sort: {y: \"x\"} ```\n\nFor different sort options for different scales, replace the channel name with a *value* object and per-scale options:\n\n```js sort: {y: {value: \"-x\"}} ```\n\nWhen sorting the mark’s index, the **sort** option is instead one of:\n\n- a channel value definition for sorting given values in ascending order\n- a {value, order} object for sorting given values\n- a {channel, order} object for sorting the named channel’s values" + }, + "stroke": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValueSpec" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke][1]; a constant CSS color string, or a channel typically bound to the *color* scale. If all channel values are valid CSS colors, by default the channel will not be bound to the *color* scale, interpreting the colors literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke" + }, + "strokeDasharray": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dasharray][1]; a constant number indicating the length in pixels of alternating dashes and gaps, or a constant string of numbers separated by spaces or commas (_e.g._, *10 2* for dashes of 10 pixels separated by gaps of 2 pixels), or *none* (the default) for no dashing\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dasharray" + }, + "strokeDashoffset": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-dashoffset][1]; a constant indicating the offset in pixels of the first dash along the stroke; defaults to zero.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-dashoffset" + }, + "strokeLinecap": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linecap][1]; a constant specifying how to cap stroked paths, such as *butt*, *round*, or *square*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linecap" + }, + "strokeLinejoin": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-linejoin][1]; a constant specifying how to join stroked paths, such as *bevel*, *miter*, *miter-clip*, or *round*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-linejoin" + }, + "strokeMiterlimit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [stroke-miterlimit][1]; a constant number specifying how to limit the length of *miter* joins on stroked paths.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-miterlimit" + }, + "strokeOpacity": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-opacity][1]; a constant between 0 and 1, or a channel typically bound to the *opacity* scale. If all channel values are numbers in [0, 1], by default the channel will not be bound to the *opacity* scale, interpreting the opacities literally.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-opacity" + }, + "strokeWidth": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The [stroke-width][1]; a constant number in pixels, or a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/stroke-width" + }, + "target": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [target][1]; a constant string specifying the target window (_e.g._,\n*_blank*) for clickable links; used in conjunction with the **href** option.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/target" + }, + "tip": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/TipPointer" + }, + { + "properties": { + "anchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The tip anchor specifies how to orient the tip box relative to its anchor position; it refers to the part of the tip box that is attached to the anchor point. For example, the *top-left* anchor places the top-left corner of tip box near the anchor position, hence placing the tip box below and to the right of the anchor position." + }, + "fontFamily": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font-family][1]; a constant; defaults to the plot’s font family, which is typically [*system-ui*][2].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-family [2]: https://drafts.csswg.org/css-fonts-4/#valdef-font-family-system-ui" + }, + "fontSize": { + "anyOf": [ + { + "$ref": "#/definitions/ChannelValue" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font size][1] in pixels; either a constant or a channel; defaults to the plot’s font size, which is typically 10. When a number, it is interpreted as a constant; otherwise it is interpreted as a channel.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-size" + }, + "fontStyle": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font style][1]; a constant; defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-style" + }, + "fontVariant": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font variant][1]; a constant; if the **text** channel contains numbers or dates, defaults to *tabular-nums* to facilitate comparing numbers; otherwise defaults to the plot’s font style, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-variant" + }, + "fontWeight": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [font weight][1]; a constant; defaults to the plot’s font weight, which is typically *normal*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/CSS/font-weight" + }, + "format": { + "additionalProperties": false, + "description": "How channel values are formatted for display. If a format is a string, it is interpreted as a (UTC) time format for temporal channels, and otherwise a number format.", + "properties": { + "ariaLabel": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fill": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fillOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fontSize": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fx": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "fy": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "geometry": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "height": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "href": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "length": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "opacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "path": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "r": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "rotate": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "src": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "stroke": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeOpacity": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "strokeWidth": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "symbol": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "text": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "title": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "weight": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "width": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "x2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y1": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "y2": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + }, + "z": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ] + } + }, + "type": "object" + }, + "frameAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The frame anchor specifies defaults for **x** and **y** based on the plot’s frame; it may be one of the four sides (*top*, *right*, *bottom*, *left*), one of the four corners (*top-left*, *top-right*, *bottom-right*,\n*bottom-left*), or the *middle* of the frame. For example, for tips distributed horizontally at the top of the frame:\n\n```js Plot.tip(data, {x: \"date\", frameAnchor: \"top\"}) ```" + }, + "lineHeight": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line height in ems; defaults to 1. The line height affects the (typically vertical) separation between adjacent baselines of text, as well as the separation between the text and its anchor point." + }, + "lineWidth": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The line width in ems (e.g., 10 for about 20 characters); defaults to infinity, disabling wrapping and clipping.\n\nIf **textOverflow** is null, lines will be wrapped at the specified length. If a line is split at a soft hyphen (\\xad), a hyphen (-) will be displayed at the end of the line. If **textOverflow** is not null, lines will be clipped according to the given strategy." + }, + "monospace": { + "anyOf": [ + { + "type": "boolean" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If true, changes the default **fontFamily** to *monospace*, and uses simplified monospaced text metrics calculations." + }, + "pathFilter": { + "anyOf": [ + { + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The image filter for the tip’s box; defaults to a drop shadow." + }, + "pointer": { + "$ref": "#/definitions/TipPointer" + }, + "pointerSize": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The size of the tip’s pointer in pixels; defaults to 12." + }, + "preferredAnchor": { + "anyOf": [ + { + "$ref": "#/definitions/FrameAnchor" + }, + { + "type": "null" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "If an explicit tip anchor is not specified, an anchor is chosen automatically such that the tip fits within the plot’s frame; if the preferred anchor fits, it is chosen." + }, + "textAnchor": { + "anyOf": [ + { + "const": "start", + "type": "string" + }, + { + "const": "middle", + "type": "string" + }, + { + "const": "end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The [text anchor][1] controls how text is aligned (typically horizontally) relative to its anchor point; it is one of *start*, *end*, or *middle*. If the frame anchor is *left*, *top-left*, or *bottom-left*, the default text anchor is *start*; if the frame anchor is *right*, *top-right*, or\n*bottom-right*, the default is *end*; otherwise it is *middle*.\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/text-anchor" + }, + "textOverflow": { + "anyOf": [ + { + "type": "null" + }, + { + "const": "clip", + "type": "string" + }, + { + "const": "ellipsis", + "type": "string" + }, + { + "const": "clip-start", + "type": "string" + }, + { + "const": "clip-end", + "type": "string" + }, + { + "const": "ellipsis-start", + "type": "string" + }, + { + "const": "ellipsis-middle", + "type": "string" + }, + { + "const": "ellipsis-end", + "type": "string" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "How truncate (or wrap) lines of text longer than the given **lineWidth**; one of:\n\n- null (default) - preserve overflowing characters (and wrap if needed)\n- *clip* or *clip-end* - remove characters from the end\n- *clip-start* - remove characters from the start\n- *ellipsis* or *ellipsis-end* - replace characters from the end with an ellipsis (…)\n- *ellipsis-start* - replace characters from the start with an ellipsis (…)\n- *ellipsis-middle* - replace characters from the middle with an ellipsis (…)\n\nIf no **title** was specified, if text requires truncation, a title containing the non-truncated text will be implicitly added." + }, + "textPadding": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The padding around the text in pixels; defaults to 8." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "x2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending horizontal position channel specifying the tip’s anchor, typically bound to the *x* scale." + }, + "y": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The starting vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The ending vertical position channel specifying the tip’s anchor, typically bound to the *y* scale." + } + }, + "type": "object" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "Whether to generate a tooltip for this mark, and any tip options." + }, + "title": { + "$ref": "#/definitions/ChannelValue", + "description": "The title; a channel specifying accessible, short textual descriptions as strings (possibly with newlines). If the tip option is specified, the title will be displayed with an interactive tooltip instead of using the SVG [title element][1].\n\n[1]: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/title" + }, + "unit": { + "anyOf": [ + { + "type": "number" + }, + { + "$ref": "#/definitions/ParamRef" + } + ], + "description": "The quantity each cell represents; defaults to 1." + }, + "x": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The optional horizontal position of the bar; a ordinal channel typically bound to the *x* scale. If not specified, the bar spans the horizontal extent of the frame; otherwise the *x* scale must be a *band* scale.\n\nIf *x* represents quantitative or temporal values, use a rectY mark instead." + }, + "y": { + "$ref": "#/definitions/ChannelValueIntervalSpec", + "description": "The vertical position (or length/height) channel, typically bound to the\n*y* scale.\n\nIf neither **y1** nor **y2** nor **interval** is specified, an implicit stackY transform is applied and **y** defaults to the identity function, assuming that *data* = [*y₀*, *y₁*, *y₂*, …]. Otherwise if an **interval** is specified, then **y1** and **y2** are derived from **y**, representing the lower and upper bound of the containing interval, respectively. Otherwise, if only one of **y1** or **y2** is specified, the other defaults to **y**, which defaults to zero." + }, + "y1": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required primary (starting, often bottom) vertical position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "y2": { + "$ref": "#/definitions/ChannelValueSpec", + "description": "The required secondary (ending, often top) horizontal position channel, typically bound to the *y* scale. Setting this option disables the implicit stackY transform.\n\nIf *y* represents ordinal values, use a cell mark instead." + }, + "z": { + "$ref": "#/definitions/ChannelValue", + "description": "The **z** channel defines the series of each value in the stack. Used when the **order** is *sum*, *appearance*, *inside-out*, or an explicit array of\n**z** values." + } + }, + "required": [ + "data", + "mark" + ], + "type": "object" + }, + "WindowTransform": { + "anyOf": [ + { + "$ref": "#/definitions/RowNumber" + }, + { + "$ref": "#/definitions/Rank" + }, + { + "$ref": "#/definitions/DenseRank" + }, + { + "$ref": "#/definitions/PercentRank" + }, + { + "$ref": "#/definitions/CumeDist" + }, + { + "$ref": "#/definitions/NTile" + }, + { + "$ref": "#/definitions/Lag" + }, + { + "$ref": "#/definitions/Lead" + }, + { + "$ref": "#/definitions/FirstValue" + }, + { + "$ref": "#/definitions/LastValue" + }, + { + "$ref": "#/definitions/NthValue" + } + ] + } + } +} diff --git a/docs/public/schema/v0.12.json b/docs/public/schema/v0.12.json index a629a1ec..b44c30f8 120000 --- a/docs/public/schema/v0.12.json +++ b/docs/public/schema/v0.12.json @@ -1 +1 @@ -v0.12.1.json \ No newline at end of file +v0.12.2.json \ No newline at end of file diff --git a/docs/public/schema/v0.json b/docs/public/schema/v0.json index a629a1ec..b44c30f8 120000 --- a/docs/public/schema/v0.json +++ b/docs/public/schema/v0.json @@ -1 +1 @@ -v0.12.1.json \ No newline at end of file +v0.12.2.json \ No newline at end of file